Java程序员面试宝典构造函数为什么不能是虚函数
在Java编程中,构造函数是一个特殊的函数,它被用来初始化对象。然而,有些人会想知道为什么构造函数不能是虚函数。这个问题有多个方面的答案。首先,从存储空间角度来看,虚函数对应一个vtable虚函数表,而这个vtable是存储在对象的内存空间的。如果构造函数是虚函数,就需要通过vtable来调用,但是对象还没有实例化,也就是内存空间还没有分配,无法找到vtable,因此构造函数不能是虚函数。
其次,从使用角度来看,虚函数主要用于在信息不全的情况下能使重载的函数得到对应的调用。而构造函数本身就是要初始化实例,使用虚函数也没有实际意义。所以构造函数没有必要是虚函数。
最后,构造函数不需要是虚函数,也不允许是虚函数,因为创建一个对象时我们总是要明确指定对象的类型,尽管可能会通过基类的指针或引用去访问它。但是析构却不一定,我们往往通过基类的指针来销毁对象,这时候如果析构函数不是虚函数,就不能正确识别对象类型,从而不能正确调用析构函数。
用户评论