0
非私有内部成员类的构造函数隐含 声明,作为第一个正式的参数,较 立即封闭的实例变量班上。
好吧,如果我们写:
A类:
package org.gradle;
public class A extends B.Inner{
public A(B b){
b.super(); //OK, invoke B.inner(B)
}
}
B类:
package org.gradle;
public class B{
public class Inner{
}
}
至于说here,b.super()
实际调用B.Inner(B)
。
但是,如果我们写
B类:
package org.gradle;
public class B {
class Inner{
public Inner(B b){
System.out.println("Inner(B)");
}
}
}
A类:
package org.gradle;
public class A extends B.Inner{
public A(B b) {
b.super(); //The constructor B.Inner() is undefined
}
}
因此,在后一个例子b.super()
试图调用B.Inner()
代替。为什么这么差?
你需要调用'b.super(b)'。错误信息中没有显示“不可见”的第一个参数,因为它是“不可见的”。 – immibis 2014-11-08 07:28:00
@immibis我不完全明白你的意思。我知道如何解决第二个例子。我想实现它。 – 2014-11-08 07:29:56
如果你在第一个例子中写了'b.super(5);',你会说“B.Inner(B,int)未定义”或者“B.Inner(int)未定义”吗? – immibis 2014-11-08 07:30:52