繁体   English   中英

当在派生类中重写该方法时,如何使用派生类Object调用基类方法?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM