首页 新闻 会员 周边

java嵌套接口

0
悬赏园豆:50 [已解决问题] 解决于 2016-03-15 10:29

关于类中嵌套接口:

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 }
we212320的主页 we212320 | 初学一级 | 园豆:31
提问于:2016-03-08 17:24
< >
分享
最佳答案
1

 

 

 

    你理解的有问题,书中所说的“实现了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,所以外界就能访问到。

 

 

 

 

收获园豆:50
我还是太年轻 | 小虾三级 |园豆:692 | 2016-03-14 17:09
其他回答(1)
0

这个作用域会帮到你的:

 

Ctrl` | 园豆:3317 (老鸟四级) | 2016-03-08 17:28

这个我知道,我想明白书中为什么讲实现了private接口的public类,只能在其自身所在的类使用,这与实际不符,是我理解有问题吗?

支持(0) 反对(0) we212320 | 园豆:31 (初学一级) | 2016-03-08 17:31

@we212320: 

因为所有的接口成员都必须在支持该接口的类中实现;多看看接口与类的关系和区别、百度一抓一大把

支持(0) 反对(1) Ctrl` | 园豆:3317 (老鸟四级) | 2016-03-08 17:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册