c++类与类之间的继承关系,java中什么是类的继承
#包括iostream
使用命名空间std
类别基础
{
公共:
int I;
基底()
{
i=9999
fun();
}
虚拟虚空乐趣()
{
cout base . fun() endl;
}
};
类别衍生:公用基底
{
公共:
int I;
Derived() {
I=-1;
}
虚拟虚空乐趣()
{
cout derived . fun() endl;
}
};
int main(int argc,char *argv[])
{
base * b=new Derived();
cout(b-I)endl;
b-fun();
}
Java代码:
类别基础
{
int i=9999
公共void fun()
{
system . out . println( base . fun());
}
基底()
{
fun();
}
}
类别衍生扩充基底
{
int I=-1;
派生的(){}
公共void fun()
{
system . out . println( derived . fun());
}
}
公共类开发
{
公共静态void main(String argv[])
{
base b=new Derived();
system . out . println(b . I);
b . fun();
}
}
差异体现在输出的第一行;
这一行是在派生的构造函数中输出的。派生本身没有构造函数。它只调用父类的构造函数,即Base的Base(),执行fun()函数。
对于C代码,执行Base:fun();
对于Java代码,它是Derived:fun();
为什么,在C中调用基类的fun的时候,这个时候子类还没有准备好,所以执行基类的fun。
分析:区别在于编译器及其工作原理。
C代码编译后,基构造函数中的代码是静态的,其中调用的其他函数的地址在编译时就已经确定了,所以执行Base:fun()。(除了虚函数是动态绑定的,其他都是静态代码)
Java代码是动态绑定的,每个函数在编译时就已经形成了虚拟机指令代码,但是具体的函数调用是动态的。因为派生类调用父类的构造函数,所以这里的fun()函数被认为是派生的。
转载请联系作者授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。