2009-02-27 3 views
11

Может кто-нибудь, пожалуйста, объясните мне, в чем разница между protected/publicВнутренние классы?охраняемые/общедоступные Внутренние классы

Я знаю, что внутренние классы следует избегать как можно больше (как описано в этом article).

Но из того, что я могу сказать, нет никакой разницы между использованием модификаторов protected или public.

Взгляните на этот пример:

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(); 
} 
} 

Все это компилирует и действует ли объявить I InnerFooprotected или public.

Что мне не хватает? Пожалуйста, укажите мне случай, когда есть разница в использовании protected или public.

Спасибо.

ответ

19

Модификатор protected доступа будет ограничить доступ других, чем те, в одном пакете и его подклассы классов.

В показанном примере public и protected будут иметь такой же эффект, как и в том же пакете.

Для получения дополнительной информации о модификаторах доступа может представлять интерес Controlling Access to Members of a Class страница The Java Tutorials.

+0

Хорошо. Я вижу свое замешательство. Потому что внутренние классы, как члены охватывающего класса, я думал с точки зрения защищенных членов. Благодарю. –

+1

@bruno conde: защищенные классы * * как защищенные члены. –

+0

Другими словами, «защищенный» в Java, применяемый к членам или внутренним классам, отличается от C++ и C#. Он предоставляет доступ к другим классам в одном пакете (пространство имен). – Qwertie

1

Вы можете просто думаю, защищенный внутренний класс защищен членом, так это только доступ для класса, упаковки, подкласса, но не для мира.

Кроме того, для класса Outter, есть только два модификатора доступа к нему. Просто публичный и пакет.

Смежные вопросы