发现一个c++多态与java多态不同的地方
刚刚看到一篇文章提出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方法,导致不能正确完成初始化。看到这里我思考了一下,由于子类重写了父类的同名函数,才导致本应该执行的函数没有执行,如果修改父类的初始化函数或者子类的初始化函数,使子类不会发生重写,是不是就不会发生上面的情况?或许即使是子类与父类,当涉及到各自的初始化的地方时就不应该使用多态性。
相关文档:
一、运算符
算术运算符:+,-,*,/,%,++,--
关系运算符:>,<,>=,<=,==,!=
布尔逻辑运算符:!,&,^,|,&&,||
位运算符:&,|,^,>>,<<,>>>
赋值运算符:=
扩展赋值运算符:+=,-=,*=,/=
字符串链接运算符:+
两数相除,那么如果 ......
// 合并 List 中的相同数据行
// Source : tmpOrderEntryListBeanList
// Target : resultOrderEntryListBeanList
// ------------------------------------------------------------------
// (1)将结果赋给 Result Livon 2010-5-18 三
// 整理列表,以便查询库存。
private List<OrderEntryListBe ......
一。谁在做Garbage Collection?
一种流行的说法:在C++
里,是系统在做垃圾回收;而在Java
里,是Java
自身在做。
在C++
里,
释放内存是手动处理的,要用delete运算符来释放分配的内存。这是流行的说法。确切地说,是应用认为不需要某实体时,就需用delete告诉系统,可
以 ......
看到园子的同僚们写的《跨平台》系列之后真的是热血沸腾,有些话不得不说,不能不说。我要揭掉Java这一层层美丽的“画皮”,让大家看看画皮之下是什么?我们看到的都是一些什么?我本人并不是一定得推荐大家用.NET平台,但是我就是看不管有些人误导初学者,向他们传导什么都 ......
1. 概念: 序列化就是把对象变成对象流(确切说是把对象的属性写入流),如果需要进而可以把对象流存成二进制文件;
2. 目的: 序列化的目的是为了方便永久存储或者网络传输;
3. 如何实现: 将类实现Serializable接口即可,无必须实现的方法,实现该接口只是为了标识该类可被序列化;
4. (转)其他需要知道的:
  ......