一本java书上有如下示例:
class A
{
private interface D
{
void f();
}
private class DImp2 implements D
{
public void f(){}
}
public D getD(){return new DImp2();}
private D dRef;
public void receiveD(D d)
{
dRef = d;
dRef.f();
}
}
public class NestingInterface
{
public static void main()
{
A a = new A();
//A.DImp2 di2 = a.getD();
//a.getD().f();
//....
}
}
上面被注释掉的2行有错,请问为什么错,请大侠们帮忙分析分析,将答案告诉小弟!
a.getD()方法返回D的引用(D的事例在class A的堆栈中创建),所以在NestingInterface中无法访问.如楼主说的,把两个private改为public 就行了
把前两个private改为public即可
好象不是改两个public那么简单的事情
直接把注释掉的代码打开,编译之后看错误信息就懂了。
我上面举的例子,意思是告诉你,需要将Dimp2定义为static的inner class,
A.DImp2 di2 = a.getD();错误你可以这样理解,
先假设DImp2不是一个class name,而是一个字段,比如
class A{ int DImp2;}
如果,DImp2不是static的,那么通过A.Dimp2是不可以访问的,需要将Dimp2定义为static才能以A.Dimp2的形式访问,
同理,现在的内部类必须是static才能以A.DImp2的形式作为一个class name