在Java中,我如何从派生类的重写方法中调用基类的方法?

152

我有两个Java类:B和A,其中B继承了另一个类A,代码如下:

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

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

我想从B.myMethod()调用A.myMethod()。 我来自C++世界,我不知道在Java中如何做这个基本的事情。

12个回答

153
你要找的关键词是super。例如,请参阅此指南

5
在C++中,似乎可以调用特定的祖先方法,但在Java中你只能将其传递给上级。 - rogerdpack

145

只需使用 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.

21

super.MyMethod() 应该在 B类MyMethod() 方法内被调用。因此应该如下:

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

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

8

调用super.myMethod();


7

我相信您可以使用Java反射机制来实现。虽然不像使用super一样直接,但它会为您提供更多的功能。

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

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

1
这段代码中没有显示任何Java反射,与其他代码相同。答案还有更多内容吗? - Nelda.techspiress

4

使用 super 关键字。


4
super.baseMethod(params);

使用super关键字调用基本方法,并传递相应的参数。


3

在这里,您正在覆盖基类的一个方法,因此,如果您想从派生类中调用基类的方法,则必须在继承类的同一方法中使用super关键字。


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);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接