我如何可以使用内部流的实例,从另一个内类的方法?
-
05-07-2019 - |
题
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();
}
}
解决方案
您的问题是您需要在函数内调用 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
就是标识符。
其他提示
几件事情是错误的;
- 你inner2需要调用 i1内部的功能
- 因为你没有宣布inner1 静态的,它需要一个实例 封闭Ex7存在。
所以你可以做像这样的东西:
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-->parentEx7-->儿童inner1.
如果你让内流静你可以做的Ex7参考,因为你正在定义内的类并不需要一个实例外流的存在。
但是Ex7Inner2类中没有方法。 使用'i1.bar();'创建方法在里面打电话,它编译好了
Ex7Inner1
需要对 Ex7
的引用才能实例化。从 Ex7Inner2
引用 Ex7.this
。
如此说
Ex7Inner1 i1 = Ex7.this.new Ex7Inner1()
更多信息,请参阅 Java教程
不隶属于 StackOverflow