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

时间:2011-05-20 02:25:45

标签: java

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方法

3 个答案:

答案 0 :(得分:3)

您需要构造一个A类型的对象。您在派生类中重写了方法m1,因此对作为B创建的对象的任何m1调用都将调用m1的B版本。如果不使用super,就无法指示编译器对基类版本进行非虚拟调用。

答案 1 :(得分:1)

您是否只是在寻找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的功能时,听起来您正在滥用继承,或至少应该使用{{{ 1}}开头。

有趣的是,在C ++中你可以这样做:A幸运的是,Java中没有等效的东西。

答案 2 :(得分:0)

简而言之,你不能这样做 - 虚拟调度会将调用委托给被推荐的。