In Java, come posso chiamare il metodo di una classe base dal metodo prioritario in una classe derivata?


137

Ho due classi Java: B, che estende un'altra classe A, come segue:

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

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

Vorrei chiamare il A.myMethod()da B.myMethod(). Vengo dal mondo C ++ e non so come fare questa cosa di base in Java.

Risposte:


145

La parola chiave che stai cercando è super. Vedi questa guida , per esempio.


4
Sembra che in C ++ puoi chiamare un metodo specifico antenato, ma non java, puoi semplicemente passarlo sulla catena ...
rogerdpack

132

Basta chiamarlo usando super.

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

21

La risposta è la seguente:

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()dovrebbe essere chiamato all'interno MyMethod()del class B. Quindi dovrebbe essere il seguente

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

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


7

Sono abbastanza sicuro che puoi farlo usando il meccanismo Java Reflection. Non è così semplice come usare super ma ti dà più potenza.

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

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

Questo non mostra alcun riflesso Java nel codice ed è lo stesso codice degli altri. C'è di più alla risposta?
Nelda.techspiress,


3
super.baseMethod(params);

chiama i metodi di base con la parola chiave super e passa i rispettivi parametri.


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

Vedi, qui stai sovrascrivendo uno dei metodi della classe base, quindi se ti piace chiamare il metodo della classe base dalla classe ereditata, allora devi usare la super parola chiave nello stesso metodo della classe ereditata.


1

Se stai usando questi metodi per l'inizializzazione, usa i costruttori di classe A e passa la parola chiave super all'interno del costruttore di classe B.

Oppure, se si desidera chiamare un metodo di superclasse dal metodo della sottoclasse, è necessario utilizzare la parola chiave super all'interno del metodo della sottoclasse come: 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);
    }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.