关于类中嵌套接口:
1.现在用private修饰接口,然后该接口被public的类实现,
2.在java编程思想中9.8节的介绍,上述public类只能在自身所在的类所使用,
但这里public类却能在外部使用,请高手详解!
1 class A { 2 private interface B { 3 String bb(); 4 } 5 public class C implements B {//照书中说法,此类只能在类A中使用 6 public String bb() { 7 return "123"; 8 } 9 } 10 11 public C getC() {//书中返回类型为接口B,但为了描述我的问题改为类C 12 return new C(); 13 } 14 } 15 16 public class NullTest { 17 18 public static void main(String[] args) { 19 A a = new A(); 20 21 A.C c1 = a.getC(); 22 System.out.println(c1.bb()); 23 24 A.C c2 = a.new C(); 25 System.out.println(c2.bb()); 26 } 27 }
你理解的有问题,书中所说的“实现了private接口的public类,只能在其自身所在的类使用”,意思是这个“public类”的实例只能在自身所在类中使用“private接口”的引用来引用。在外面,就不能用“private接口”的引用来指向C的实例了。像这样:A.B b=a.new C()就错了,因为没有人知道B这个接口。
你应该跳出“C实现A接口”这个束缚,更高一层的理解public和private两个修饰词,和C implements B并没有关联在一起。在外面看来,只知道A里有C,不知道A里有B。也就是说,外界并不知道A里面的是C是实现B接口的,外界只知道A里有C,仅此而已。至于C里面的方法bb(),外界才不关心这个方法是C里面自己定义的,还是是因为实现B接口才有的方法,外界看到的就是C和C的public修饰的成员和方法。因为bb()这个方法也是public,所以外界就能访问到。
这个作用域会帮到你的:
这个我知道,我想明白书中为什么讲实现了private接口的public类,只能在其自身所在的类使用,这与实际不符,是我理解有问题吗?
@we212320:
因为所有的接口成员都必须在支持该接口的类中实现;多看看接口与类的关系和区别、百度一抓一大把