non-static- 内部类对外部类的所有常规成员具有完全的可访问性。 但是还有另一种方法可以使用(outerClass.this.regularMember(..访问这些成员,请查看以下代码:
public class Car {
int x = 3;
public static int hp =6;
public void move()
{
System.out.println(hp);
}
public class Engine{
public int hp =5;
public int capacity;
public void start()
{
Car.this.move(); // or we can use only move();
}
}
}
- 您能否解释一下使用
Car.this.move();
和move();
之间是否有任何实际区别 - 你怎么能解释Car.this的这种语法,因为据我所知,这里指的是引擎类型的对象,但是如果我使用另一个引用,比如通过做
Engine smallEngine = new Engine();
那么这个关键字不能被smallEngine替换。
-
如果您的
Engine
类具有move
方法,则move()
与Car.this.move()
不同。 -
this
表示当前实例。 如果要引用外部类,可以使用外部类限定this
关键字以引用外部类的实例。 要记住的重要一点是,Engine
的实例(因为它不是静态的(总是伴随着Car
的实例,因此您可以引用它。
您不能说OuterClass.smallEngine.move()
,因为这会与访问静态公共字段的语法冲突 OuterClass
.
如果OuterClass
有这样的字段:
public static String smallEngine;
。那么上面的语法将是模棱两可的。 由于this
是一个关键字,因此不能有一个名为 this
的字段,因此语法OuterClass.this
永远不会模棱两可。