本人在看thinking in java,在接口一章看到一个嵌套接口的程序,不太明白,希望得到大家的帮助:class A {
private interface B{
void f();
}
class BImp implements B{
void f(){};
}
B getB(){
return new BImp();
}
public void receiveD(D d){}
}
class Test{
public static void main(String[] args){
A a = new A();
A a2 = new A();
a2.receiveB(a.getB());
为什么a2.receiveB(a.getB())是正确的呢?a.getB()返回的是一个私有的接口,应该不能用在Test类中啊
private interface B{
void f();
}
class BImp implements B{
void f(){};
}
B getB(){
return new BImp();
}
public void receiveD(D d){}
}
class Test{
public static void main(String[] args){
A a = new A();
A a2 = new A();
a2.receiveB(a.getB());
为什么a2.receiveB(a.getB())是正确的呢?a.getB()返回的是一个私有的接口,应该不能用在Test类中啊
//a2.receiveB( a.getB() );
A.B b = a.getB(); // 这里会报错 The type A.B is not visible
a2.receiveB( b );也就是说,如果试图“访问”或者“使用”这个私有接口的话,就会报错;相对而言,你原来的程序算是“只过了一下手”,所以就通融了,hehe,大概可以这么理解吧。■□■□■□■□■□■□■□■
□ □
■ 忍以明志 勤以致远 ■
□ □
■□■□■□■□■□■□■□■
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
A.B ab = a.getB();会报错呢?
错误在于A.B,不在于a.getB(),B是私有的,A.B肯定报错,因为你根本访问不到A类里面的B接口,如何声明一个A.B的引用?A.B就已经是在外部访问B了,当然会编译错误。