Доступ к внешнему классу изнутри внутреннего класса с использованием 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();
}
}
}
- Не могли бы вы объяснить, если будет практическая разница между
Car.this.move();
а такжеmove();
- Как вы можете объяснить этот синтаксис Car.this. потому что, насколько я понимаю, здесь это относится к объекту Type Engine, но тогда, если я использовал другую ссылку, скажем, делая
Engine smallEngine = new Engine();
тогда это ключевое слово не может быть заменено на smallEngine.
1 ответ
Если твой
Engine
класс имеетmove
метод, тоmove()
будет отличаться отCar.this.move()
,this
означает текущий экземпляр. Если вы хотите сослаться на внешний класс, вам разрешается квалифицироватьthis
ключевое слово с внешним классом для ссылки на экземпляр внешнего класса. Важно помнить, что случайEngine
(поскольку он не является статичным) всегда сопровождается экземпляромCar
и поэтому вы можете обратиться к нему.
Вам не разрешено говорить OuterClass.smallEngine.move()
потому что это будет противоречить синтаксису для доступа к статическому общему полю OuterClass
,
Если OuterClass
было поле как это:
public static String smallEngine;
... тогда приведенный выше синтаксис будет неоднозначным. поскольку this
является ключевым словом, вы не можете иметь поле с именем this
и, следовательно, синтаксис OuterClass.this
никогда не будет амбициозным.