Java与 C++ 都是面向对象的语言,它们都能够实现“封装、继承、多态”的面向对象的思想。通过本次对于C++代码改写Java的实现,我对于这两种语言的的 区别有了深一层次的理解与体会,现总结如下:
1、 数据类型及类
- Java是完全面向对象的语言,所有函数(方法)和变量(属性)必须是类的一部分,除了基本数据类型之外,其余都作为类对象,包括数组。对象将数据和方法结合起来,把他们封装在类中,这样每个对象都可以实现自己的特点和行为。
- C++包括了面向对象的东西,允许将函数和变量定义为全局。
2、数据类型转换
- C++中有时会出现自动强制类型转换的问题,比如一个浮点型的变量可以赋值给一个整型变量,同时去掉浮点数的尾数。
- Java中当需要由高级数据类型转换为低级数据类型时,必须由程序进行显式地强制类型转换。
3、常量标识符
- Java为final
- C++为const
4、变量初始化
- Java类中声明一个变量时可以直接初始化(除局部变量外,未显式初始化的变量将自动进行初始化)。
- C++中不会进行自动初始化。
5、创建对象
- Java中
Account account;
该语句并没有创建对象,只是进行了声明;Account account = new Account();
该语句生成对象,并生成对象引用,占用堆空间,可以直接使用。 - C++中
Account account
在栈中创建了对象,可以直接使用;Account* account = new Account()
在堆上创建对象,可以直接使用,生命周期无限,需要进行手动删除。
6、构造函数互调
- Java的构造函数之间可以相互调用,采用this、super关键字。
- C++不行。
7、抽象类与抽象方法
- Java抽象类和抽象方法使用abstract关键字,对于抽象方法,在抽象类中只指定方法名及类型,而不写实现代码。抽象类必须要派生子类,若派生的子类是具体类,则具体子类中必须实现抽象类中定义的所有抽象方法。
- C++中虚函数的声明处加上 virtual 关键字,子类中必须有同名的虚函数,并且它们是覆盖关系。
8、编译及运行
- Java源码会先经过一次编译,成为中间码,中间码再被解释器解释成机器码。
- C++源码一次编译,直接在编译过程中形成机器码。