2010-09-26 9 views
14

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

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

ответ

15

Если переопределить родительский метод в своем ребенке, дочерние объекты всегда будут использовать изменённые версии. Но; вы можете использовать ключевое слово 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."); 
    } 
} 

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

Я ребенок.

Раскоментируйте комментируемого линия и будет печатать:

Я родитель.

Я ребенок.

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

+0

Большое вам спасибо –

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 метод в классе ребенка вызывает super.add повторно использовать логику добавления.

1

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

+0

спасибо, я тоже думаю, что это лучше ... –

0

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

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

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

Смежные вопросы