[英]How to call base class method with derived class Object when that method overridden in derived class?
class A
{
public void m1()
{
System.out.println("hi-base class");
}
}
class B extends A
{
public void m1()
{
System.out.println("hi-derived ");
}
public static void main(String args[])
{
B b1=new B();
}
}
在这里我想通过使用Derived类对象而不使用super来调用基类m1方法
您需要构造一个A类型的对象。您在派生类中重写了方法m1,因此对作为B创建的对象的任何m1调用都将调用m1的B版本。 如果不使用super
,就无法指示编译器对基类版本进行非虚拟调用。
你只是在寻找super.m1();
? 这将调用直接父方法。
但是,你不能实例化类型的对象B
从外面B
和使用。
你做不到:
B value = new B();
value.super.m1(); // call A's implementation
但是,您可以在B中执行此操作:
@Override
public void m1()
{
System.out.println("hi from B");
super.m1();
}
public void useAM1()
{
super.m1();
}
当然,当你开始提供变通方法以获得A
功能时,听起来你是滥用继承,或者至少应该使用A
的实例开始。
有趣的是,在C ++中你可以这样做: value->A::m1();
。 幸运的是 ,Java中没有相应的东西。
简而言之,你不能这样做 - 虚拟调度会将调用委托给被引用的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.