Доступ к внешнему классу изнутри внутреннего класса с использованием outerClass.this

Класс -non-static- inner имеет полный доступ ко всем обычным членам внешнего класса. но есть другой способ получить доступ к этим членам с помощью (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.

1 ответ

Решение
  1. Если твой Engine класс имеет move метод, то move() будет отличаться от Car.this.move(),

  2. this означает текущий экземпляр. Если вы хотите сослаться на внешний класс, вам разрешается квалифицировать this ключевое слово с внешним классом для ссылки на экземпляр внешнего класса. Важно помнить, что случай Engine (поскольку он не является статичным) всегда сопровождается экземпляром Car и поэтому вы можете обратиться к нему.

Вам не разрешено говорить OuterClass.smallEngine.move() потому что это будет противоречить синтаксису для доступа к статическому общему полю OuterClass,

Если OuterClass было поле как это:

 public static String smallEngine;

... тогда приведенный выше синтаксис будет неоднозначным. поскольку this является ключевым словом, вы не можете иметь поле с именем this и, следовательно, синтаксис OuterClass.this никогда не будет амбициозным.

Другие вопросы по тегам