Подкласс, вызывающий метод суперкласса с использованием «this» - PullRequest
2 голосов
/ 06 ноября 2019

Если у суперкласса есть метод, который использует ключевое слово "this", и подкласс вызывает этот метод, будет ли метод суперкласса, использующий "this", ссылаться на объект подкласса?

Ответы [ 3 ]

0 голосов
/ 06 ноября 2019

this всегда ссылаются на собственный объект. т.е., если ребенок использует this ссылку, он указывает на ребенка. Если родитель использует this, он указывает на родителя.

Если this не может найти ссылку на то, что нужно в самом себе, тогда она ищет ссылку в родительском элементе.

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

Проще говоря, this указывает на экземпляр класса, который был создан. Если этот экземпляр не содержит упомянутую сущность, то поиск выполняется для родителя (если есть)

0 голосов
/ 06 ноября 2019

Ключевое слово this в классе всегда будет ссылаться на объект.

Я написал несколько примеров классов для лучшего понимания.

Родительский класс

public class TestClass{
    public void func(){
        this.cFunc();
        System.out.println("In Parent");
    }

    public void cFunc(){
        System.out.println("cFunc in parent");
    }
}

Дочерний класс

public class TestClassChild extends TestClass{
    public void cFunc(){
        System.out.println("cFunc in child");
    }
}

Случаи

1) Дочерний объект, доступ к которому осуществляется с использованием ссылки на дочерний класс

TestClassChild tc = new TestClassChild();
tc.func();
Выходные данные
cFunc in child - Child method is called
In Parent

2) Доступ к дочернему объекту осуществляется по ссылке родительского класса

TestClass t = new TestClassChild();
t.func();

Выход
cFunc in child - Irrespective if it was referenced by parent still child method got called. 
In Parent

3) Доступ к родительскому объекту осуществляется по ссылке родительского класса

TestClass tp = new TestClass();
tp.func();

Выход
cFunc in parent - Parent function got called.  
In Parent

Надеюсь, что приведенные ниже примеры прояснят вам ситуацию.

0 голосов
/ 06 ноября 2019

Нет, this всегда ссылается на экземпляр класса, в котором мы его используем.

Если мы используем this в родительском классе, он всегда будет возвращать экземпляр родительского класса.

Если вы хотите использовать this дочернего класса в методе родительского класса, переопределите метод родительского класса.

...