2008-11-06 1 views
112

У меня есть два Java-классов: B, который расширяет другой класс А, следующим образом:В Java, как я могу вызвать метод базового класса из метода переопределения в производном классе?

class A { 
    public void myMethod() { /* ... */ } 
} 

class B extends A { 
    public void myMethod() { /* Another code */ } 
} 

Я хотел бы назвать A.myMethod() из B.myMethod(). Я исхожу из C++ world, и я не знаю, как это сделать на Java.

ответ

119

Ключевое слово, которое вы ищете, это super. См., Например, this guide.

+3

Похоже, что в C++ вы можете вызвать определенный метод предка, но не java, вы можете просто передать его цепочке ... – rogerdpack 2011-10-17 18:00:55

111

Просто позвоните, используя супер.

public void myMethod() 
{ 
    // B stuff 
    super.myMethod(); 
    // B stuff 
} 
14

super.MyMethod() следует называть внутри MyMethod()class B. Так оно и должно быть следующим

class A { 
    public void myMethod() { /* ... */ } 
} 

class B extends A { 
    public void myMethod() { 
     super.MyMethod(); 
     /* Another code */ 
    } 
} 
3
super.baseMethod(params); 

вызывать базовые методы с супер ключевым словом и передать соответствующий Params.

15

Ответ заключается в следующем:

super.Mymethod(); 
super();    // calls base class Superclass constructor. 
super(parameter list);   // calls base class parameterized constructor. 
super.method();   // calls base class method. 
1
// Using super keyword access parent class variable 
class test { 
    int is,xs; 

    test(int i,int x) { 
     is=i; 
     xs=x; 
     System.out.println("super class:"); 
    } 
} 

class demo extends test { 
    int z; 

    demo(int i,int x,int y) { 
     super(i,x); 
     z=y; 
     System.out.println("re:"+is); 
     System.out.println("re:"+xs); 
     System.out.println("re:"+z); 
    } 
} 

class free{ 
    public static void main(String ar[]){ 
     demo d=new demo(4,5,6); 
    } 
} 
2
class test 
{ 
    void message() 
    { 
     System.out.println("super class"); 
    } 
} 

class demo extends test 
{ 
    int z; 
    demo(int y) 
    { 
     super.message(); 
     z=y; 
     System.out.println("re:"+z); 
    } 
} 
class free{ 
    public static void main(String ar[]){ 
     demo d=new demo(6); 
    } 
} 
7

Я уверен, что вы можете сделать это с помощью Java механизм Reflection. Это не так просто, как использование супер, но это дает вам больше энергии.

class A 
{ 
    public void myMethod() 
    { /* ... */ } 
} 

class B extends A 
{ 
    public void myMethod() 
    { 
     super.myMethod(); // calling parent method 
    } 
} 
+0

Это не показывает никакого отражения java в коде и является тем же самым кодом, что и другие , Есть ли еще ответ? – 2017-08-09 17:09:19

1

Если ур использовать эти методы для инициализации, то используют конструкторы класса A и передавать супер ключевое слово внутри конструктора класса B.

Или, если вы хотите, чтобы вызвать метод суперкласса от метода подкласса то вы должны использовать супер ключевое слово внутри метода подкласса, например: super.myMethod();

3

Престол, здесь вы переопределение одного из методов базового класса, следовательно, если вы хотите вызвать метод базового класса из унаследованного класса, то вы должны использовать супер ключевое слово в том же методе унаследованного класса.

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