发现一个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的用法
List包括List接口以及List接口的所有实现类。因为List接口实现了Collection接口,所以List接口拥有Collection接口提供的所有常用方法,又因为List是列表类型,所以List接口还提供了一些适合于自身的常用方法,如表1所示。
表1 List接口定义的常用方法及功能
从表1可以看出,List接口提供的适合于自身的 ......
C/C++
头文件一览
//////////////////////////////////////////////////////////////////////////
C
头文件
(C89,C95)
(C++98,C++03也包含)
include <assert.h> //诊断库
include <ctype.h> //字符处理函数库
include <errno.h> //错误定义
include <float.h& ......
// 合并 List 中的相同数据行
// Source : tmpOrderEntryListBeanList
// Target : resultOrderEntryListBeanList
// ------------------------------------------------------------------
// (1)将结果赋给 Result Livon 2010-5-18 三
// 整理列表,以便查询库存。
private List<OrderEntryListBe ......
首先我们要先写一个备份类
BackupDb.java
代码如下:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class BackupDb {
public BackupDb() {
}
public String back ......