2

我无法弄清楚 Java 内部类的问题。假设你有

class Outer
{
     int outer = 0;
     class Inner
     {
          int inner = Outer.this.outer; //(or just outer as it is not shadowed)
          inner = 3; //or whatever, even outer = 3
     }
}

好吧,当我写最后一个作业时,我得到了编译错误

Syntax error on token ";", , expected

在先行线上。

为什么我不能修改内部?

谢谢!

4

5 回答 5

6

您不能在方法之外有语句。一种技术是使用实例初始化块

class Outer
{
     int outer = 0;
     class Inner
     {
          int inner = Outer.this.outer; //(or just outer as it is not shadowed)
          // instance initializer block:
          {
              inner = 3; //or whatever, even outer = 3
          }
     }
}

或者,定义一个构造函数:

class Outer
{
     int outer = 0;
     class Inner
     {
          int inner = Outer.this.outer; //(or just outer as it is not shadowed)
          Inner() {
              inner = 3; //or whatever, even outer = 3
          }
     }
}
于 2013-07-10T13:35:27.393 回答
4

您必须将代码放在方法或构造函数中:

class Outer
{
     int outer = 0;
     class Inner
     {
          int inner = Outer.this.outer; 
          public Inner() {
               inner = 3; 
          }

          public increment() {
               inner++;
          }
      }
}
于 2013-07-10T13:35:25.373 回答
3

您的赋值inner必须在方法或构造函数中,而不是在类中“松散”。

于 2013-07-10T13:35:18.687 回答
0

不能直接初始化 inner = 3;外部方法。请确保inner = 3; 在任何方法或构造函数内部。

 public Inner() 
 {
       inner = 3; 
 }
于 2013-07-10T13:37:34.680 回答
0

您需要包括以下行:

 inner=3;

在内部类的方法中。

于 2013-07-10T13:36:39.890 回答