Trong Java, làm cách nào để tôi gọi phương thức của lớp cơ sở từ phương thức ghi đè trong lớp dẫn xuất?


137

Tôi có hai lớp Java: B, mở rộng một lớp A khác, như sau:

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

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

Tôi muốn gọi A.myMethod()từ B.myMethod(). Tôi đến từ thế giới C ++ và tôi không biết làm thế nào để làm điều cơ bản này trong Java.

Câu trả lời:


145

Từ khóa bạn đang tìm kiếm là super. Xem hướng dẫn này , ví dụ.


4
Có vẻ như trong C ++, bạn có thể gọi một phương thức tổ tiên cụ thể, nhưng không phải java, bạn có thể chuyển nó lên chuỗi ...
rogerdpack

132

Chỉ cần gọi nó bằng siêu.

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

21

Trả lời như sau:

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()nên được gọi là bên trong MyMethod()của class B. Vì vậy, nó nên như sau

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

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


7

Tôi khá chắc chắn rằng bạn có thể làm điều đó bằng cơ chế Java Reflection. Nó không đơn giản như sử dụng siêu nhưng nó cung cấp cho bạn nhiều sức mạnh hơn.

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

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

Điều này không hiển thị bất kỳ phản ánh java trong mã và là mã giống như các mã khác. Có nhiều hơn để trả lời?
Nelda.techspiress


3
super.baseMethod(params);

gọi các phương thức cơ bản với siêu từ khóa và vượt qua các thông số tương ứng.


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

Xem, ở đây bạn đang ghi đè một trong các phương thức của lớp cơ sở do đó nếu bạn muốn gọi phương thức lớp cơ sở từ lớp kế thừa thì bạn phải sử dụng siêu từ khóa trong cùng một phương thức của lớp kế thừa.


1

Nếu bạn sử dụng các phương thức này để khởi tạo thì hãy sử dụng các hàm tạo của lớp A và truyền siêu từ khóa bên trong hàm tạo của lớp B.

Hoặc nếu bạn muốn gọi một phương thức siêu lớp từ phương thức lớp con thì bạn phải sử dụng siêu từ khóa bên trong phương thức lớp con như: 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);
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.