Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

protected/public Inner Classes

Can someone please explain to me what is the difference between protected / public Inner classes?

I know that public inner classes are to avoid as much as possible (like explained in this article).

But from what I can tell, there is no difference between using protected or public modifiers.

Take a look at this example:

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

All of this compiles and is valid whether I declare InnerFoo protected or public.

What am I missing? Please, point me out a case where there's a difference in using protected or public.

Thanks.

like image 726
bruno conde Avatar asked Feb 27 '09 15:02

bruno conde


2 Answers

The protected access modifier will restrict access from classes other than the ones in the same package and its subclasses.

In the example shown, the public and protected will have the same effect, as they are in the same package.

For more information on access modifiers, the Controlling Access to Members of a Class page of The Java Tutorials may be of interest.

like image 182
coobird Avatar answered Sep 18 '22 18:09

coobird


You can just think protected inner class is protected member, so it only access for class, package, subclass but not for the world.

In addition, for outter class, there is only two access modifier for it. Just public and package.

like image 22
wangzhengyi Avatar answered Sep 18 '22 18:09

wangzhengyi