一、类的组合:
1、初始化问题(构造函数的参数传递方法):
在C++中,通常只要对象中不含有指针类数据的话,对象与对象之间是可以相互赋值且不会出错的,因此组合出来的类完全可以将传递过来的对象参数直接赋值给对应数据成员;
而在java中,对象的定义是类似与C++中的指针的,所以直接在对象之间相互赋值有时是会出现错误的(会使所有对象均指向同一个存储区域,这时修改任意其中一个对象,都会造成其他对象的值也发生变化),因此,在构造函数中,我们一般不将传递过来的对象参数直接赋值给当前对象的数据成员,而是先为当前类指定一块存储区域,然后将对象参数的值通过基本数据类型的形式赋值到上述存储区域上。这样就保证了我们在修改对象参数指向的区域内容时不会再影响已经确定了值的当前对象。
二、继承:(:、extends)
1、初始化问题:
在C++中,对派生类初始化时,有如下顺序:父类--派生类中对象成员--派生类中基本数据类型,且父类的初始化只能通过初始化列表来实现。
在讲java之前,我们首先知道,java中对父类数据成员的初始化是通过 super(父类构造函数的参数列表) 来实现的。
然后,java中派生类的初始化也遵循上述初始化顺序(且通过语法规则强制保证),即java中若super函数不是派生类构造函数的第一条语句的话,编译无法通过。
2、数据覆盖的处理方法:
在C++中如果出现派生类将父类的成员覆盖,我们可以通过Father::(被覆盖的成员名)来调用被覆盖的成员。
同样,在java,我们可以借助super.(被覆盖的参数名)来表示该量为父类中的成员。(或者说使用当前派生类时用this.+成员名,this可以省略;使用其父类中成员时,用super . +成员名 来实现)。