Это зависит ...
Если только класс B
объявляет поле value
, это не имеет значения. Но если класс A
также объявит поле value
, это будет иметь значение:
Посмотрите на этот пример:
public class A extends B {
private Object value = "A";
public void printValue() {
System.out.println(super.value);
System.out.println(this.value);
}
public static void main(String[] args) {
A a = new A();
a.printValue();
}
}
Если вы запустите этот код, результат будет :
B
A
JLS говорит
Форма super.
Идентификатор относится к полю с именем Идентификатор текущего объекта, но текущий объект рассматривается как экземпляр суперкласса текущего класса
Таким образом, поскольку суперкласс B
объявляет поле value
, на него ссылается super.value
.
Относительно ключевого слова this
JLS говорит :
... ключевое слово this
обозначает значение, которое является ссылкой к объекту, для которого был вызван метод экземпляра или метод по умолчанию ... Тип this
является классом или типом интерфейса T
, в котором встречается ключевое слово this
.
In В вашем случае тип this
равен A
. Таким образом, this.value
относится к унаследованному полю value
, объявленному в классе B
. Но если класс A
объявит поле value
, то this.value
будет ссылаться на поле в классе A
.