• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Modyfikator protected

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
242 wizyt
pytanie zadane 30 marca 2018 w Java przez neos Początkujący (320 p.)
Witam, piszę program który wykorzystuję kilka klas z czego jedna jest bazowa. Bazowa klasa ma zmienne poprzedzone modyfikatorem protected aby klasy pochodne mogły je dziedziczyć. Moje pytanie jest tak, dlaczego w klasie Main w funkcji głównej może edytować te zmienne, zmieniać ich wartości skoro są dla tej klasy "niewidoczne"? A raczej powinne być. Nie chcę aby można było się to tych zmiennych bezpośrednio odwołać w programie głównym, a nie chce też dawać modyfikatora private bo wtedy nie będę mógł ich odziedziczyć. Ktoś ma pomysł jak to rozwiązać?

2 odpowiedzi

+3 głosów
odpowiedź 30 marca 2018 przez mibdbz Gaduła (4,300 p.)
Modyfikator protected pozwala także na używanie zmiennych oznaczonych nim w klasach znajdujących się w tym samym pakiecie. Tak jak domyślny modyfikator, wtedy kiedy nie poprzedzimy zmiennej żadnym modyfikatorem.
komentarz 30 marca 2018 przez Javowiec Pasjonat (21,580 p.)
Dokładnie, Java ma 3 modyfikatory dostępu i 4 poziomy dostępu.

https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
0 głosów
odpowiedź 30 marca 2018 przez CzikaCarry Szeryf (75,480 p.)

Moje pytanie jest tak, dlaczego w klasie Main w funkcji głównej może edytować te zmienne, zmieniać ich wartości skoro są dla tej klasy "niewidoczne"?

Albo coś skopałeś albo Java jest językiem gorszego sortu. Nie programuje w Javie, ale pokaż kod :) 

komentarz 30 marca 2018 przez neos Początkujący (320 p.)
package com.company;

public class Punkt
{
    protected float masa;

    //konstruktor domyślny
    public Punkt()
    {
        //przypisanie wartości domyślnej do masy
        this.masa = 1;
    }
    //konstruktor z parametrami
    public  Punkt(float mass)
    {
        this.masa = mass;
    }
    //Główny moment bezwładności
    public float GlownyMomentBezwladnosci()
    {
        return 0;
    }
    //Moment bezwładności ze Steinera
    public float MomentBezwladnosciSteiner(float odleglosc)
    {
        return GlownyMomentBezwladnosci() + masa*odleglosc*odleglosc;
    }
    //metoda zwracająca masę punktu
    public String Opis()
    {
        return "Punkt materialny";
    }
    //metoda pozwalająca zmienić masę punktu
    public void zmianaMasy(float mass)
    {
        this.masa = mass;
    }
    //metoda pozwalająca zwrócić masę punktu
    public float zwrocMase()
    {
        return this.masa;
    }

}






 

package com.company;

public class Main {

    public static void main(String[] args)
    {

        Punkt punkt = new Punkt();
        punkt.masa = 5;

    }
}

 

Program nie wyrzuca błędu :/

komentarz 30 marca 2018 przez Javowiec Pasjonat (21,580 p.)

Przerzuć klasę Main albo Punkt do innego pakietu i problem z głowy. Tylko wtedy klasa Main będzie musiała zaimportować klasę Punkt słowem kluczowym import.

komentarz 30 marca 2018 przez neos Początkujący (320 p.)
Działa, dzięki za pomoc!

Podobne pytania

0 głosów
2 odpowiedzi 84 wizyt
pytanie zadane 28 września 2020 w C i C++ przez Pelo Użytkownik (520 p.)
0 głosów
1 odpowiedź 144 wizyt
0 głosów
2 odpowiedzi 255 wizyt
pytanie zadane 19 stycznia 2018 w Java przez must Bywalec (2,980 p.)

90,817 zapytań

139,493 odpowiedzi

313,550 komentarzy

60,311 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...