2009-02-27 7 views
11

Czy ktoś może mi wyjaśnić, jaka jest różnica pomiędzy klasami protected/publicWewnę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 InnerFooprotected lub public.

Czego mi brakuje? Proszę wskazać mi przypadek, w którym istnieje różnica w używaniu protected lub public.

Dzięki.

Odpowiedz

19

modyfikator dostępu ograniczy dostęp z klas innych niż te w tym samym pakiecie i jego podklasach.

W pokazanym przykładzie, public i protected będą miały taki sam efekt, ponieważ są w tym samym opakowaniu. Więcej informacji na temat modyfikatorów dostępu można uzyskać pod adresem Controlling Access to Members of a Class pod adresem The Java Tutorials.

+0

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. –

+1

@bruno conde: chronione klasy * są * podobne do chronionych członków. –

+0

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

1

Można tylko myśleć, że chroniona wewnętrzna klasa jest chronionym członkiem, więc ma dostęp tylko do klasy, pakietu, podklasy, ale nie do świata.

Dodatkowo, dla klasy zewnętrznej, istnieje tylko dwa modyfikatory dostępu. Po prostu publiczny i pakietowy.