使用outerClass.this从内部类中访问外部类

时间:2017-03-26 06:18:01

标签: java this inner-classes outer-classes

-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. 之间存在任何实际差异,请您解释一下
  3. 你如何解释 Car.this。的这种语法,因为据我所知这个这里指的是Type Engine的对象但是如果我使用另一个引用说Engine smallEngine = new Engine();那么这个关键字不能被 smallEngine 替代。

1 个答案:

答案 0 :(得分:3)

  1. 如果您的Engine课程采用move方法,那么move()将与Car.this.move()不同。

  2. this表示当前实例。如果要引用外部类,可以使用外部类限定this关键字以引用外部类的实例。需要记住的重要一点是Engine的实例(因为它不是静态的)总是伴随着Car的实例,所以你可以参考它。

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

    如果OuterClass有这样的字段:

     public static String smallEngine;
    

    ...然后上面的语法将是暧昧的。由于this是一个关键字,因此您不能拥有名为this的字段,因此语法OuterClass.this永远不会具有暧昧关系。