发现一个c++多态与java多态不同的地方
来源:互联网 发布:淘宝秋冬睡衣女套装 编辑:程序博客网 时间:2024/06/03 12:01
刚刚看到一篇文章提出c++多态与java多态不同的地方,基本意思如下:
请看C++代码:
class Base
{
public:
Base()
{
init();
}
virtual ~Base() {}
protected:
int value;
virtual void init()
{
value = 100;
}
};
class Derived : public Base
{
public:
Derived()
{
init();
}
protected:
void init()
{
cout << "value = " << value << endl;
// 做一些额外的初始化工作
}
};
int main(int argc, char* argv[])
{
Base* pb;
pb = new Derived();
delete pb;
return 0;
}
执行结果是
value = 100
再看java代码:
class Base
{
public Base()
{
init();
}
protected int value;
protected void init()
{
value = 100;
}
}
class Derived extends Base
{
public Derived()
{
init();
}
protected void init()
{
System.out.println("value = " + value);
// 做一些额外的初始化工作
}
}
public class Test
{
public static void main(String[] args)
{
Base base = new Derived();
}
}
执行结果是
value = 0
value = 0
在java中子类的init方法重写了父类的init方法,导致不能正确完成初始化。看到这里我思考了一下,由于子类重写了父类的同名函数,才导致本应该执行的函数没有执行,如果修改父类的初始化函数或者子类的初始化函数,使子类不会发生重写,是不是就不会发生上面的情况?或许即使是子类与父类,当涉及到各自的初始化的地方时就不应该使用多态性。
- 发现一个c++多态与java多态不同的地方
- java与c/c++不同的地方
- Java语法:与c++不同的地方
- Java与c++不同的地方
- 发现了一个下Java视频的地方
- 发现QQ一个体贴的地方
- 今天发现了一个有趣的地方
- 发现一个编程练习的地方
- 发现一个学前端很好的地方
- 发现一个好地方
- java与c的不同
- c与c++不同发现之一
- c++与java多态实现的不同
- 发现一个c语言中用字符数组和char型指针管理字符串一个很容易搞混的地方
- 【Java】Java与C的不同
- firefox与IE中几处不同的地方
- XAML与HTML不同的地方
- MySql与SqlServer不同的地方
- 被神化的框架
- asp.net Windows 2008 下设置时间显示格式
- Windows Programming(八)_ChilldWindow
- DLL的MFC编程
- nginx + php + https 配置用例
- 发现一个c++多态与java多态不同的地方
- TSlib校准原理!
- jdbc事务处理机制
- 关于远程安装oracle与错误的处理
- 触摸屏 (简体中文)
- 看看行不
- 电话销售的6个关键成功因素
- “/etc/X11/xorg.conf”中鼠标部分的配置详解
- c语言面试题