今天一直在为一段code困惑,基类A中定义了一个抽象方法,并在子类B中实现,类C继承了class B,并重载了这个方法。现在在基类中调用这个方法,那么基类会去调用哪个类中的方法呢?
实际上这个问题很简单,答案是调用class C中的实现方法。如果class C中没有,则调用class C父类的方法。今天居然纠结在这里,还好DL一语令我恍然大悟。其实我在自学java时也忽略了这个地方。
下面的代码就是很好的例子
public abstract class A
{
public abstract String print();
public void fun()
{
System.out.println(print());
}
}
public class B extends A
{
public B()
{
super.fun();
}
public String print()
{
return "This is Class B !";
}
public void fun()
{
System.out.println(print());
}
}
public class C extends B
{
public C()
{
super.fun();
}
public String print()
{
return "This is Class C !";
}
}
public class Test
{
public static void main(String[] args)
{
new B();
new C();
}
}
输出的结果就是
This is Class B !
This is Class C !
This is Class C !