关于“嵌套interface”的疑问,java 菜鸟,望大侠赐教!!

wssgwps 2003-08-23 11:04:11
一本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行有错,请问为什么错,请大侠们帮忙分析分析,将答案告诉小弟!
...全文
70 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
shine333 2003-08-27
  • 打赏
  • 举报
回复
我上面举的例子,意思是告诉你,需要将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
wssgwps 2003-08-27
  • 打赏
  • 举报
回复
谢谢shine333(shine) !
那 a.getD().f(); 又错在哪儿呢???
麻烦帮忙看看吧,谢谢了!
wssgwps 2003-08-26
  • 打赏
  • 举报
回复
还没有回答清我的问题呀兄弟们,555555~~~!
请再帮我看看,谢谢了!!
flashspy 2003-08-24
  • 打赏
  • 举报
回复
a.getD()方法返回D的引用(D的事例在class A的堆栈中创建),所以在NestingInterface中无法访问.如楼主说的,把两个private改为public 就行了
wssgwps 2003-08-24
  • 打赏
  • 举报
回复
sorry, 上面的private class DImp2 implements D 应该是:public class DImp2 implements D!(打字时疏忽了)
现在再帮我看看!

shine333 2003-08-24
  • 打赏
  • 举报
回复
class A{
B b = new B();
class B{
public void doB(){}
}
static class C{
public void doC(){}
}
}

public class D{
A.b.doB();
// A.doB(); or A.B.doB(); is wrong.
A.C.doC();
}

huhaowen1978 2003-08-24
  • 打赏
  • 举报
回复
好象不是改两个public那么简单的事情
artisanhe 2003-08-24
  • 打赏
  • 举报
回复
直接把注释掉的代码打开,编译之后看错误信息就懂了。
zhonghua2003 2003-08-24
  • 打赏
  • 举报
回复
studyhard1314(studyhard1314)
你干嘛啊?老是这样,什么资料库。一沱屎啊。
ewingchen 2003-08-24
  • 打赏
  • 举报
回复
把前两个private改为public即可
jkit 2003-08-23
  • 打赏
  • 举报
回复
private的东东在类外是不能访问的。
将private改为public即可。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧