父类与子类关系:继承关系
-
继承通过extends 关键字来声明: 子类 extends 父类
-
继承的作用 : 继承是子类自动共享父类数据和方法的机制,这是类之间的一种关系, 提高了软件的可重用性和可扩展性,提高了代码复用性.
- 继承中this与super的使用
子类中属性名跟父类属性名相同,则子类的属性隐藏了父类的属性 , 此时想引用父类变量则需要用关键字 super 来引用
一个类中的局部变量名与该类的成员变量名相同,此时想引用成员变量需要关键字this来引用
this 代表本类对象引用, super 代表父类对象引用
this. 方法\属性 调用本类方法或访问本类属性super. 方法\属性 调用父类方法或访问父类属性
this(); 调用本类构造函数;super() 调用父类构造函数.
this()或super()调用构造函数必须作为构造函数的第一条语句
一个构造函数不能同时调用多个本来构造函数也不能同时调用多个父类构造函数
一个构造函数不能同时调用本类构造函数和父类构造函数,即构造函数中不能同时使用this和super来调用子父类构造函数
子类构函数默认都会隐式调用的父类构函数,即执行语句super();
每个类如果没有显式定义构造函数,则系统自动添加空参数空方法体的构造函数,当定义了含参的构造函数后系统不再添加
空参空方法体的构造函数,如果要使用空参数的构造方法则必须显式的定义,否则调用空参数的构造函数时会出错,
由于每个子类构造方法在没有通过super显式指明调用父类哪个构造函数时,系统自动调用super(),即调用父类空参数的
构造函数,所以如果父类因为定义了含参的构造函数后,不含参的构造函数就不存在了,要使用空参数构造函数必须显式
定义 ,如果没有显式定义那么子类构造函数必须用super(参数)
表明调用父类含参构造函数,当显式的调用了含参的父类构造函数之后 就不会再调用不含参的父类构造函数
- 继承中方法的重写
重写又叫覆盖 ,重写是相对于方法而言的,是指具有子父类的继承关系的方法的重新实现过程子类的属性名跟父类的同名时只是隐藏,在子类中直接访问该名的属性时相对于用this.属性名
来访问,由于子类隐藏了父类的属性,所以this.属性名访问的是子类的属性,要访问被隐藏的父类
属性可以通过super.属性名 来访问
静态成员的"覆盖"也是隐藏,起不到覆盖的作用 , 要访问父类被隐藏的静态方法或属性通过父类名访问
只有非静态方法才能称为覆盖
覆盖发生在继承关系的子父类的非静态成员方法之间和实现关系的接口与实现类的方法之间
覆盖的特点
1)方法名称 参数列表 返回类型子类方法名称 参数列表 返回类型必须与父类方法的名称,参数列表和返回类型一致
2)权限修饰子类方法不能缩小父类访问权限,子类重写父类必须保证子类权限大于等于父类权限
为什么不能缩小访问权限?因为如果没权限限制将与多态机制发生冲突
3)static修饰静态只能覆盖静态,父类的非静态方法不能被子类覆盖为静态方法
4)final修饰父类被final修饰的方法都不能被子类覆盖 ,被final修饰的父类方法被子类继承后子类可以
直接对该方法进行重载
5)thr