W języku Java, jak wywołać metodę klasy bazowej z metody przesłaniającej w klasie pochodnej?


137

Mam dwie klasy Java: B, która rozszerza inną klasę A w następujący sposób:

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

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

Chciałbym zadzwonić pod numer A.myMethod()nadawcy B.myMethod(). Pochodzę ze świata C ++ i nie wiem, jak zrobić tę podstawową rzecz w Javie.

Odpowiedzi:


145

Szukane słowo kluczowe to super. Zobacz na przykład ten przewodnik .


4
Wygląda na to, że w C ++ możesz wywołać określoną metodę przodka, ale nie java, możesz po prostu przekazać to w łańcuchu ...
rogerdpack

132

Po prostu nazwij to super.

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

21

Odpowiedź brzmi następująco:

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()powinien być nazywany wewnątrz MyMethod()z class B. Więc powinno wyglądać następująco

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

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


7

Jestem pewien, że możesz to zrobić za pomocą mechanizmu Java Reflection. Nie jest to tak proste, jak użycie super, ale daje więcej mocy.

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

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

To nie pokazuje żadnego odbicia Java w kodzie i jest to ten sam kod, co inne. Czy jest coś więcej do odpowiedzi?
Nelda.techspiress


3
super.baseMethod(params);

wywołaj metody podstawowe za pomocą słowa kluczowego super i przekaż odpowiednie parametry.


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

Widzisz, tutaj zastępujesz jedną z metod klasy bazowej, dlatego jeśli chcesz wywołać metodę klasy bazowej z klasy dziedziczonej, musisz użyć słowa kluczowego super w tej samej metodzie klasy dziedziczonej.


1

Jeśli używasz tych metod do inicjalizacji, użyj konstruktorów klasy A i przekaż słowo kluczowe super wewnątrz konstruktora klasy B.

Lub jeśli chcesz wywołać metodę superklasy z metody podklasy, musisz użyć słowa kluczowego super wewnątrz metody podklasy, na przykład: 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);
    }
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.