Czy ktoś może mi wyjaśnić, jaka jest różnica pomiędzy klasami protected
/public
Wewnętrzna?chronione/publiczne Klasy wewnętrzne
Wiem, że klasy wewnętrzne powinny być omijane tak bardzo, jak to możliwe (jak wyjaśniono w tej publikacji: article).
Ale z tego co wiem, nie ma różnicy między używaniem modyfikatorów protected
lub public
.
Spójrz na ten przykład:
public class Foo1 {
public Foo1() { }
protected class InnerFoo {
public InnerFoo() {
super();
}
}
}
...
public class Foo2 extends Foo1 {
public Foo2() {
Foo1.InnerFoo innerFoo = new Foo1.InnerFoo();
}
}
...
public class Bar {
public Bar() {
Foo1 foo1 = new Foo1();
Foo1.InnerFoo innerFoo1 = foo1.new InnerFoo();
Foo2 foo2 = new Foo2();
Foo2.InnerFoo innerFoo2 = foo2.new InnerFoo();
}
}
Wszystko to kompiluje i jest ważne, czy Oświadczam InnerFoo
protected
lub public
.
Czego mi brakuje? Proszę wskazać mi przypadek, w którym istnieje różnica w używaniu protected
lub public
.
Dzięki.
Ok. Widzę moje zamieszanie. Ponieważ wewnętrzne klasy są podobnymi członkom zamykającej się klasy, myślałem w kategoriach chronionych członków. Dzięki. –
@bruno conde: chronione klasy * są * podobne do chronionych członków. –
Innymi słowy, "chroniony" w Javie, niezależnie od tego, czy jest stosowany do członków czy klas wewnętrznych, różni się od C++ i C#. Przyznaje dostęp do innych klas w tym samym pakiecie (przestrzeni nazw). – Qwertie