作者dnzteeqrq (忍所不能忍)
看板java
标题[问题] 介面
时间Tue Aug 31 04:11:02 2010
有几些问题想请问一下各位高手 ~
class A{
private interface D {void f();}
public class inner01 implements D {
public void f(){System.out.println("inner01");}
}
public D getD(){ return new inner01();}
private D d1;
public void recevieD(D d){
d1 = d;
d1.f(); }
}
public class B{
public static void main(String args[]){
A t = new A();
// A.inner01 i1 = t.getD(); // 不太明白为何错误 回传型态的问题??
请高手帮忙解释一下 ^^"
// t.getD().f();
t.recevieD(t.getD());
}}
输出结果: " inner01 "
还有 getD() 的 return new inner01() 回传之後,
是不是会变成 new A().new inner01() ?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.46.100.214
1F:推 PsMonkey:请先叙述自己的解读中与现象的矛盾点 08/31 07:39
^^" 第二个问题有点通想了!return new inner01();
实际上是 return this.new inner01(); (不是很有把握)
^^^^
↓↓
呼叫该方法的实体,也就是new A()
第一,回传 D 型态,但实作上还是指向 inner01!
变成 A.inner01 t = (D)new inner01(); (这只是我自己的想像,没有这种写法)
造成 子类别 实作 父类别 (错误)
第二,改成 A.D t =t.getD() → 父类别 实作 父类别 (正确)
但 D 介面为 private 权限,所以在这也造成取存失败
又有问题了 囧" return new inner01()
return this.new inner01()
return new A().new inner01() 以上三个都确定
return this.new A().new inner01() (错误)
所以如果不写出 this 的话!那是由编译器自行视情况要不要加 this 吗???
不知道我的解读得几分 >"< , 请鞭小力一点
2F:推 kuninaka:干嘛搞得这麽乱? 08/31 09:32
3F:→ dnzteeqrq:k大你的乱是指??@@" 08/31 10:36
※ 编辑: dnzteeqrq 来自: 114.46.100.214 (08/31 10:43)