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方法答案 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)
简而言之,你不能这样做 - 虚拟调度会将调用委托给被推荐的。