Di Java, bagaimana cara memanggil metode kelas dasar dari metode utama dalam kelas turunan?


140

Saya memiliki dua kelas Java: B, yang memperluas kelas A lainnya, sebagai berikut:

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

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

Saya ingin menelepon A.myMethod()dari B.myMethod(). Saya berasal dari dunia C ++ , dan saya tidak tahu bagaimana melakukan hal dasar ini di Java.

Jawaban:


147

Kata kunci yang Anda cari adalah super. Lihat panduan ini , misalnya.


4
Sepertinya di C ++ Anda dapat memanggil metode leluhur tertentu, tetapi tidak java, Anda dapat meneruskannya ke rantai ...
rogerdpack

135

Sebut saja menggunakan super.

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

21

Jawabannya adalah sebagai berikut:

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()harus dipanggil di MyMethod()dalam class B. Jadi seharusnya sebagai berikut

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

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


7

Saya cukup yakin bahwa Anda dapat melakukannya menggunakan mekanisme Java Reflection. Ini tidak semudah menggunakan super tetapi memberi Anda lebih banyak kekuatan.

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

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

Ini tidak menunjukkan refleksi java dalam kode dan merupakan kode yang sama dengan yang lain. Apakah ada lebih banyak jawabannya?
Nelda.techspiress


3
super.baseMethod(params);

panggil metode dasar dengan kata kunci super dan teruskan params masing-masing.


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

Lihat, di sini Anda menimpa salah satu metode kelas dasar sehingga jika Anda ingin memanggil metode kelas dasar dari kelas yang diwarisi maka Anda harus menggunakan kata kunci super dalam metode yang sama dengan kelas yang diwarisi.


1

Jika Anda menggunakan metode ini untuk inisialisasi, gunakan konstruktor kelas A dan berikan kata kunci super di dalam konstruktor kelas B.

Atau jika Anda ingin memanggil metode kelas super dari metode subkelas maka Anda harus menggunakan kata kunci super di dalam metode subkelas seperti: 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);
    }
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.