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
将是标识符。
现在我觉得这是一个愚蠢的问题..我怎么能写这样的代码? – 2009-09-10 17:43:09
哈哈,我经常发现自己也在问自己的代码。不要让它让你失望 - 你并不孤单! – 2009-09-10 17:51:52
这里有一些错误;
- 您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 - > child inner1。
如果您将内部类设为静态,那么您可以取消Ex7引用,因为您正在定义内部类不需要存在外部类的实例。
但在Ex7Inner2类中没有方法。 用'i1.bar();'创建方法''内部调用,编译好
Ex7Inner1
需要参考Ex7
才能实例化。从Ex7Inner2
那参考是Ex7.this
。
这样说
Ex7Inner1 i1 = Ex7.this.new Ex7Inner1()
从更多信息,请参见Java Tutorial。
- 1. 在使用同一实例时从外部类调用内部类方法
- 2. 内部类引用外部类实例
- 3. 实例方法中的内部类
- 4. 是否可以从内部类实例访问一个外部类实例?
- 5. 如何从另一个类中调用抽象内部类的方法?
- 6. 如果在外部类的方法中声明内部类,如何初始化内部类的实例?
- 7. 调用另一个类的内部类
- 8. 从它的封闭类的静态方法中实例化一个内部类
- 9. 外部类内部类 - 实例化内部类作为外部类的成员
- 10. 一个类方法(模块内部)如何更新一个实例变量?
- 11. 从java-me内部类调用其他实例方法
- 12. 内部类的实例化
- 13. 如何实现一个内部类?
- 14. 如何从同一类的另一个实例方法调用实例方法?
- 15. PHP如何实例内部类
- 16. 在类别类方法实现内从块内部返回一个对象
- 17. 由另一个内部类扩展的内部类
- 18. Java内部类访问变量在另一个内部类
- 19. 为什么以及何时使用静态内部类或实例内部类?
- 20. 访问另一个类的从一个内部类不同类
- 21. 删除内部类的实例在外部类的一个实例
- 22. 从类内部访问外部方法
- 23. 另一个内部类的内部子类 - 根类有多少个引用?
- 24. 如何从方法内部获取JavaScript类/实例方法的名称?
- 25. 只从本身内部实例化类
- 26. 如何在另一个类中调用抽象的内部类方法?
- 27. 从静态方法的内部返回类的新实例?
- 28. 如何从一个内部类
- 29. 在类内部创建类的实例
- 30. 抽象类实例化内部类
你试过了吗?发生了什么?我没有尝试过,但我怀疑你的内部公开课实际上是公开的,但它应该起作用。 – 2009-09-10 17:10:44
答案实际上与内部类没有任何关系,它是一个基本的语法错误。 – skaffman 2009-09-10 17:11:41
我错过了Ex7Inner2的问题。我正在等待Eclipse启动。 – 2009-09-10 17:19:03