如何调用基类方法。在“ 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();
}
}
答案 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();
}
如果确实需要,有很多解决方法,但是通常不需要。