Java 如何调用基类方法
如何调用基类方法。在“invoke”类的方法“test”中,我试图向上转换到基类型以准确调用其方法,但出于某种原因,我对派生方法的调用是相同的Java 如何调用基类方法,java,Java,如何调用基类方法。在“invoke”类的方法“test”中,我试图向上转换到基类型以准确调用其方法,但出于某种原因,我对派生方法的调用是相同的 class BaseClass { protected void print(){ System.out.println("This is method print from BaseClass"); } } class DerivedClass extends BaseClass{ @Override
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();
}
}
您可以在其上添加一个方法,专门调用超类方法,如下所示:
public void superPrint() {
super.print();
}
然后从派生类调用它:
derived.superPrint();
Java多态性的工作方式与您预期的不同。调用对象的方法时,将调用“最特定”的方法,除非另有指定。这是有意义的,因为您总是希望对象的行为符合实现的意图,而不是基类的意图(因为基类不知道特定的类-换句话说,您在派生类中有更多的上下文,因此该行为更适用) 在您的示例中,对象仍然是
DerivedClass
类型,尽管您将其“强制”为BaseClass
。强制转换只掩盖了一个事实,即您实际上有一个DerivedClass
-对象,但行为仍然来自DerivedClass
中重写的方法
如果要从派生类调用超级方法,可以使用super
关键字:
public String toString() {
return "123 " + super.toString();
}
如果你真的真的需要它,有很多方法可以解决这个问题,但通常你不需要。你可以在上面添加一个方法,它可以调用超类方法,但你不能。这违背了重写方法
print()
的全部目的。首先,这是为了什么?如果您想要方法的超级用户,为什么首先要重写该方法?如果你想要超类的方法,为什么不实例化超类呢?事实上,这是一个教育性的例子,我正在体验语言的可能性。