1.变量:
如果子父类中出现了非私有的同名的成员变量时,子类要访问本类中变量用this,
子类要访问父类中的同名变量用super
用法几乎一致,this代表的是本类对象的引用
super代表的是父类对象的引用
注意:如果子类中没有父类中有的变量,那么用super也可以代表子类对象的引用
2.子父类中的函数
当子类和父类出现一模一样的函数时,
当子类调用该函数时,会运行子类函数的内容,
如同父类的函数被覆盖了一样。
这种情况是函数另一个特点:重写(覆盖)
当子类继承了父类,沿袭了父类的功能到子类中,
但子类虽具备该功能,但是功能的内容却和父类不一致,这时没有必要定义新功能
而是使用覆盖特性,保留父类的功能定义,并重写功能内容
覆盖:(函数/方法)
子类覆盖父类,必须保证子类的权限一定要大于等于父类权限,才可覆盖,否则编译失败
public>默认(没有权限修饰符)>private
静态只能覆盖静态
3.子父类中的构造函数
在对子类对象进行初始化时,父类的构造函数也会运行。
因为子类的构造函数默认第一行有一条隐藏语句,super();
这句话会访问父类中空参数的构造函数,而且子类中所有的构造函数默认第一行都是super();
为什么子类一定要访问父类中的构造函数
因为父类中的数据,所以子类中的对象在建立时,需要先查看父类是如何对这些数据进行初始化的
所以子类在对象初始化时要先访问一下父类中的构造函数。
如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定。
注意:super语句一定定义在子类构造函数的第一行
结论:子类的所有的构造函数,默认都会父类中空参数的构造函数
但若父类中没有空参数的构造函数,则需要在子类中手动通过super(),this()语句形式来指定要访问的构造函数
当然,子类的构造函数第一行也可以手动指定this语句来访问本类中的构造函数。
子类中至少会有一个构造函数会访问父类中的构造函数。
|
|