Dobry wieczór :]
Uczę się Javy z książki i aktualnie jestem przy temacie pakietów. Przy pomocy zadania podobnego do tego, które widnieje w książce, chciałem przetestować kontrolę dostępu w obrębie klas i pakietów (private, public, protected).
Problem napotkałem już przy testowaniu kontroli dostępu w obrębie tego samego pakietu. Możliwe, że jestem idiotą i nie widzę tu jakiejś oczywistej rzeczy, ewentualnie w mojej książce jest błąd.
Mam taką banalną strukturę:
Plik Dostep1:
package JakisPakiet1;
public class Dostep1 {
int zm = 10;
public int zm_pub = 11;
private int zm_priv = 12;
protected int zm_prot = 13;
public Dostep1() {
System.out.println("zm = " + zm);
System.out.println("zm_pub = " + zm_pub);
System.out.println("zm_priv = " + zm_priv);
System.out.println("zm_prot = " + zm_prot);
}
}
Plik Dostep2.java:
package JakisPakiet1;
class Dostep2 extends Dostep1 {
Dostep2() {
System.out.println(zm);
System.out.println(zm_pub);
System.out.println(m_priv);
System.out.println(zm_prot);
}
}
Plik Dostep3.java:
package JakisPakiet1;
class Dostep3 {
Dostep3() {
Dostep1 obj = new Dostep1();
System.out.println(obj.zm);
System.out.println(obj.zm_pub);
System.out.println(obj.zm_priv);
System.out.println(obj.zm_prot);
}
}
Pliki umieszczone w katalogu o nazwie zgodnej z nazwą pakietu, czyli JakisPakiet1.
Próba kompilacji Dostep2.java zwraca błąd "cannot find symbol" dla każdej próby wyświetlenia dziedziczonej po klasie Dostep1 zmiennej składowej.
Próba kompilacji Dostep3.java zwraca błąd cannot find symbol" dla wiersza, zawierającego próbę utworzenia egzemplarza klasy Dostep1.
Innymi słowi, klasy Dostep2 i Dostep3 nie widzą klasy Dostep1.
Jak widać, klasy te są w tym samym pakiecie (no chyba, że nie ;>).
Dodam, że gdy usunę wiersz "package JakisPakiet1;" z tychże plików źródłowych, tym samym umieszczając klasy w domyślnej przestrzeni nazw, wszystko kompiluje się jak powinno (a właściwie wyświetlają się oczywiste błędy o braku dostępu do zmiennych priv klasy Dostep1).
Ktoś pomoże? Proszę.