ใน 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

เพียงแค่เรียกมันว่าใช้ super

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 มันไม่ได้ตรงไปตรงมาเหมือนกับการใช้ super แต่มันให้พลังมากขึ้น

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

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

สิ่งนี้ไม่แสดงการสะท้อนกลับจาวาใด ๆ ในรหัสและเป็นรหัสเดียวกันกับรายการอื่น ๆ มีคำตอบให้มากกว่านี้ไหม?
Nelda.techspiress


3
super.baseMethod(params);

เรียกวิธีการพื้นฐานด้วยคำหลักที่ยอดเยี่ยมและส่งผ่านพารามิเตอร์ที่เกี่ยวข้อง


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 ภายในเมธอดคลาสย่อยเช่น: 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);
    }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.