public class Ex7 {
private int fld;
private void meth(int val) {
fld = val;
System.out.println(" meth() -> fld = " + fld);
}
public class Ex7Inner1 {
void operateOnFld() {
fld = 12;
}
void operateOnMeth() {
meth(10);
}
public void bar() {
System.out.println(" bar() ");
}
}
class Ex7Inner2 {
Ex7Inner1 i1 = new Ex7Inner1();
// how to call i1.bar() ??
i1.bar();
}
}
答案 0 :(得分:8)
您的问题是您需要在函数内调用i1.bar()
。例如
class Ex7Inner2 {
Ex7Inner1 i1 = new Ex7Inner1(); // this is now a field of the Ex7Inner2 class
public void callBar() {
i1.bar(); // this will work
}
}
将来,您可能会发现,如果您在问题中包含错误,那么人们可以提供更多帮助,我现在就会这样做。当您尝试按照自己的方式编译代码时,会出现类似
的错误Ex7.java:26: <identifier> expected
i1.bar();
^
1 error
这是因为你可以在方法之外做的唯一事情(就像你最初拥有的那样)是声明变量。所以它期待一个“标识符”,它意味着“你要声明的变量的名称”。所以,如果你说过
String s;
然后s
将成为标识符。
答案 1 :(得分:0)
这里有些不妥之处;
所以你可以这样做:
public class Ex7 {
private Ex7Inner1 i1;
public class Ex7Inner1 {
public void bar() {
System.out.println( " bar() " );
}
}
class Ex7Inner2 {
// how to call i1.bar() ??
public Ex7Inner2() {
Ex7.this.i1.bar();
}
}
}
访问Ex7的i1。
你的Ex7实例包含inner1和inner2,而你在inner2中的引用是inner2 - &gt; parentEx7 - &gt; child inner1。
如果你使内部类是静态的,你就可以废除Ex7引用,因为你定义了内部类不需要外部类的实例存在。
答案 2 :(得分:0)
但是Ex7Inner2类中没有方法。 使用'i1.bar();'创建方法在里面打电话,它编译好了
答案 3 :(得分:0)
Ex7Inner1
需要引用Ex7
才能实例化。来自Ex7Inner2
的引用为Ex7.this
。
如此说
Ex7Inner1 i1 = Ex7.this.new Ex7Inner1()
从更多信息中查看Java Tutorial。