Вызов метода родительского класса из объекта дочернего класса в java

У меня есть родительский класс, у которого есть метод, в дочернем классе я переопределяю этот метод родительского класса. В третьем классе я создаю объект child и, используя этот объект, хочу, чтобы метод вызова родительского класса. Можно ли вызвать этот метод родительского класса? Если да, то как?

Пожалуйста, ответьте

Ответы

Ответ 1

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

public class PolyTest{
    public static void main(String args[]){
        new Child().foo();
    }

}
class Parent{
    public void foo(){
        System.out.println("I'm the parent.");
    }
}

class Child extends Parent{
    @Override
    public void foo(){
        //super.foo();
        System.out.println("I'm the child.");
    }
}

Это будет печатать:

Я ребенок.

Раскомментируйте прокомментированную строку и напечатайте ее:

Я родитель.

Я ребенок.

Вы должны искать концепцию полиморфизма.

Ответ 2

Используйте ключевое слово super внутри переопределенного метода в дочернем классе для использования метода родительского класса. Вы можете использовать ключевое слово только в переопределенном методе. Пример ниже поможет.

public class Parent {
    public int add(int m, int n){
        return m+n;
    }
}


public class Child extends Parent{
    public int add(int m,int n,int o){
        return super.add(super.add(m, n),0);
    }

}


public class SimpleInheritanceTest {
    public static void main(String[] a){
        Child child = new Child();
        child.add(10, 11);
    }
}

Метод add в классе Child вызывает super.add для повторного использования логики добавления.

Ответ 3

Прежде всего, это плохой дизайн, если вам нужно что-то подобное, это хорошая идея для рефакторинга, например. путем переименования метода. Java позволяет вызывать метод overriden с использованием ключевого слова "super" , но только один уровень в иерархии, я не уверен, может быть, Scala и некоторые другие языки JVM поддерживают его для любого уровня.

Ответ 4

Предположим, что иерархия C->B->A, когда A является базовым классом.

Я думаю, там больше, чтобы исправить это, чем переименовать метод. Это будет работать, но это исправить?

Один из способов состоит в том, чтобы реорганизовать все функциональные возможности, общие для B и C, в D, и позволить B и C наследовать от D: (B,C)->D->A Теперь метод в B, который скрывал реализацию из C, специфичен для B и остается там, Это позволяет C вызывать метод в без каких-либо уловок.