В Java, как я могу вызвать метод базового класса из переопределяющего метода в производном классе?


137

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

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

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

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

Ответы:


145

Ключевое слово, которое вы ищете, это super. Смотрите это руководство , например.


4
Похоже, в C ++ вы можете вызывать определенный метод предка, но не Java, вы можете просто передать его по цепочке ...
rogerdpack

132

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

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

21

Ответ таков:

super.Mymethod();
super();                // calls base class Superclass constructor.
super(parameter list);          // calls base class parameterized constructor.
super.method();         // calls base class method.

20

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

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

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


7

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

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

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

Это не показывает никакого отражения Java в коде и является тем же самым кодом, что и другие. Есть ли еще ответ?
Nelda.techspiress


3
super.baseMethod(params);

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


3
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);
    }
}

3

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


1

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

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


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);
    }
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.