Доступ к функции суперкласса, использующей объект подкласса

У меня есть объект подкласса, расширяющего его суперкласс. Существует переопределенный метод в подклассе, который можно назвать с помощью объекта. Это возможно назвать функциональное использование суперкласса объекта подкласса?

package supercall;

public class Main {

    public static void main(String[] args) {
        SomeClass obj = new SubClass();
        obj.go();   //is there anything like, obj.super.go()?
    }

}

class SomeClass {
    SomeClass() {

    }
    public void go() {
        System.out.println("Someclass go");
    }
}

class SubClass extends SomeClass {
    SubClass() {

    }
    @Override
    public void go() {
        System.out.println("Subclass go");
    }
}

Рассмотрите код выше.

Здесь это печатает

Подкласс идет

. Вместо этого я должен распечатать

Суперкласс идет

.

5
задан Weishi Zeng 20 January 2015 в 23:31
поделиться

4 ответа

Нет, это невозможно, и если вы думаете, что вам это нужно, переосмыслите свой дизайн. Весь смысл переопределения метода в том, чтобы заменить его функциональность. Если другой класс знает так много о внутренней работе этого класса, вы полностью убиваете инкапсуляцию.

16
ответ дан 18 December 2019 в 07:29
поделиться

Вместо:

System.out.println("Subclass go");

Напишите

super.go();

(Или, знаете, просто не реализуйте этот метод ...).

2
ответ дан 18 December 2019 в 07:29
поделиться

Один из способов - заставить подкласс вызывать реализацию суперкласса. Но я предполагаю, что это не то, что вам нужно?

class SubClass extends SomeClass {    
SubClass() {}    
    @Override    
    public void go() {    
        super.go
    }
}
0
ответ дан 18 December 2019 в 07:29
поделиться

Есть ли способ добиться этого? Нет, нет.

Во время выполнения JVM будет выбирать методы для вызова на основе типа экземпляра (для вас это полиморфизм), а не на основе типа, с которым он объявлен.

Ваш экземпляр является экземпляром подкласса, поэтому будет вызван метод go () в подклассе.

0
ответ дан 18 December 2019 в 07:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: