Я попробовал с приведенным ниже примером, он работает нормально.
Я ожидал, что он будет выбирать значение подкласса, поскольку объект не будет создан для суперкласса (как абстрактного). Но он выбирает только значение поля суперкласса.
Пожалуйста, помогите мне понять, что это за концепции?
abstract class SuperAbstract {
private int a = 2;
public void funA() {
System.out.println("In SuperAbstract: this.a " + a);
}
}
class SubClass extends SuperAbstract {
private int a = 34;
}
Я звоню new SubClass.funA();
Я ожидаю, что он напечатает 34, но он печатает 2.
P.S.: Что я хочу знать, почему использование этого в абстрактном классе не дает мне ошибку?
Как подчеркивается ниже, текст this
будет работать над экземпляром, а абстрактные классы не будут иметь экземпляр.
Внутри метода экземпляра или конструктор, это ссылка на текущий объект - объект, чей метод или конструктор. Вы можете обратиться к любому члену текущий объект из экземпляра метод или конструктор, используя это. от: http://java.sun.com/docs/books/tutorial/java/javaOO/thiskey.html