1

-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();
     }

  }
}
  1. 您能否解释一下使用Car.this.move(); 和之间是否有任何实际区别move();
  2. 你如何解释Car.this 的这种语法。,因为据我了解,这里指的是 Type Engine 的一个对象,但是如果我使用另一个引用说这样做,Engine smallEngine = new Engine();那么 这个关键字不能被smallEngine替代。
4

1 回答 1

3
  1. 如果你的Engine类有一个move方法,那么move()将不同于Car.this.move().

  2. this表示当前实例。当你想引用外部类时,你可以this用外部类限定关键字来引用外部类的实例。要记住的重要一点是Engine(因为它不是静态的)的实例总是伴随着一个实例,Car因此您可以引用它。

你不能说OuterClass.smallEngine.move(),因为这会与访问 . 的静态公共字段的语法冲突OuterClass

如果OuterClass有这样的字段:

 public static String smallEngine;

...那么上述语法将是模棱两可的。由于thisis 是一个关键字,因此您不能为字段命名this,因此语法OuterClass.this永远不会模棱两可。

于 2017-03-26T06:35:56.430 回答