Вызов метода родительского класса из объекта дочернего класса в 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 вызывать метод в без каких-либо уловок.