как получить доступ к переопределенному, нестатическому методу абстрактного класса в подклассе - PullRequest
1 голос
/ 02 декабря 2011

В моей программе есть только два класса, один из которых является Parent, который является абстрактным классом и имеет нестатический конкретный метод, void show (), теперь есть другой класс, Child, который расширяет абстрактный класс, Parent и переопределяет метод show (). Так что теперь есть какой-либо способ получить доступ к методу абстрактного класса из основного метода класса Child без вызова другого нестатического метода класса Child.

Ответы [ 4 ]

3 голосов
/ 02 декабря 2011

Поскольку Child.show() является статическим, вы должны сделать это:

class Child extends Parent {
    static void show() {
        Child c = new Child();
        c.myShow();
    }

    void show() {
         super.show();
    }
}

Ответ на отредактированное сообщение : нельзя вызывать нестатический метод без экземпляра.Любая другая деталь этой ситуации не имеет значения, если вы не можете / не хотите создавать экземпляр Parent или Child, поскольку это просто невозможно.Теперь возникает вопрос: почему вы хотите это сделать?Чего пытаетесь достичь?

1 голос
/ 02 декабря 2011

Чтобы получить доступ к родительским методам, вы ставите префикс «super».Итак, в вашем случае используйте:

super.show();
1 голос
/ 02 декабря 2011

Это то, что вы ищете:

super.show();

хотя это будет работать только внутри (нестатической) функции-члена подкласса.

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

Однако, если вам нужно сделать это, это предполагает, что ваша иерархия классов разработана неправильно ...

0 голосов
/ 02 декабря 2011

Дочерний класс всегда может использовать ключевое слово super для доступа к методу своего суперкласса. Итак, в классе Child вы можете сделать super.show();.

...