如何调用基类方法

时间:2019-02-26 11:36:32

标签: java

如何调用基类方法。在“ invoke”类的方法“ test”中,我试图转换为基本类型以准确地调用其方法,但是由于某种原因,我对派生的方法具有相同的调用

class BaseClass {

    protected void print(){
        System.out.println("This is method print from BaseClass");

    }

}

class DerivedClass extends BaseClass{

    @Override
    protected void print() {

        System.out.println("This is method print from DerivedClass");

    }
}

public class invokeDrawing{

    public void test() {

        DerivedClass derived = new DerivedClass();
        derived.print();

        System.out.println("****************");

        BaseClass derivedTest = (BaseClass)derived;
        derivedTest.print();

    }
}

2 个答案:

答案 0 :(得分:0)

您可以在其上添加一个方法,该方法将专门调用超类方法,如下所示:

public void superPrint() {
    super.print();
}

然后从派生类中调用它:

derived.superPrint();

答案 1 :(得分:0)

Java多态性的工作原理与您预期的不同。除非另外指定,否则在调用对象的方法时,将调用“最特定”的方法。这是有道理的,因为您始终希望对象按照实现的意图而不是基类的意图行事(因为基类不知道特定的类-换句话说,您在派生类中拥有更多上下文,因此该行为更适用)。

在您的示例中,尽管您已将对象“投射”到DerivedClass,但该对象仍为BaseClass类型。强制转换只笼罩了您实际上有一个DerivedClass-Object的事实,但是行为仍然来自DerivedClass中覆盖的方法。

如果要从派生类调用超方法,则可以使用super关键字:

public String toString() {
    return "123 " + super.toString();
}

如果确实需要,有很多解决方法,但是通常不需要。