class A
{
public A()
{
foo();
}
public void foo()
{
System.out.println("A:foo()");
}
}
class B extends A
{
public B()
{
}
public void foo()
{
System.out.println("B:foo()");
}
}
public class Polymorphism
{
public static void main(String[] args)
{
B b = new B();
}
}
其打印输出的结果是 B:foo(),我想问下为什么是这样???
另外,我查找过C++里面的多态性,类似的程序,但是其输出结果是不一样的,理由如下:
在12.7.3条中有明确的规定。这是一种特例,在这种情况下,即在构造子类时调用父类的构造函数,而父类的构造函数中又调用了虚成员函数,这个虚成员函数即使被子类重写,也不允许发生多态的行为。即,这时必须要调用父类的虚函数,而不子类重写后的虚函数。
Java中是允许在构造函数中发生多态的。我也想过这之间的区别:因为Java是允许在定义数据成员的时候赋值的,C++却不允许,查找资料说是没有分配内存空间,这是不是由于它们的内存模型的区别导致的???
|