关于继承:在Java中,如何从派生类中的重写方法调用基类的方法?

In Java, how do I call a base class's method from the overriding method in a derived class?

我有两个Java类:B,它扩展了另一个类A,如下:

1
2
3
4
5
6
7
class A {
    public void myMethod() { /* ... */ }
}

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

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


您要查找的关键字是super。例如,请参阅本指南。


用super就可以了。

1
2
3
4
5
6
public void myMethod()
{
    // B stuff
    super.myMethod();
    // B stuff
}


答案如下:

1
2
3
4
super.Mymethod();
super();                // calls base class Superclass constructor.
super(parameter list);          // calls base class parameterized constructor.
super.method();         // calls base class method.

super.MyMethod()应在class BMyMethod()内部调用。所以应该是这样的

1
2
3
4
5
6
7
8
9
10
class A {
    public void myMethod() { /* ... */ }
}

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

我确信你可以用Java反射机制来完成它。它不像使用super那么简单,但它给你更多的力量。

1
2
3
4
5
6
7
8
9
10
11
12
13
class A
{
    public void myMethod()
    { /* ... */ }
}

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


调用super.mymethod();


使用super关键字。


请看,这里您将重写基类的一个方法,因此,如果您想从继承类调用基类方法,则必须在继承类的同一方法中使用super关键字。


1
super.baseMethod(params);

使用super关键字调用基方法并传递各自的参数。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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);
    }
}

如果u r使用这些方法进行初始化,那么使用类A的构造函数并在类B的构造函数内传递super关键字。

或者,如果您想从子类方法调用一个超类方法,那么您必须在子类方法中使用super关键字,例如:super.mymethod();


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// 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);
    }
}