1:继承
使用关键字extends实现。
格式:class Zi extends Fu{}
继承的好处?
1:简化代码量,简化书写。代码看起来比较简洁
2:让类与类之间产生了关系,所以导致了面向对象的第三个特征,多态的出现。
继承的特点?
java只支持单继承,不支持多继承。
java里面支持多层继承。
到底什么时候使用继承呢?
1:可以分析两个类之间是否有包含关系,如果有,就可以继承。
2:先假设让某一个类继承另一个类,看一下继承过来的功能是不是自己应该具备的,如果是,可以继承,如果不是,则不能继承。
2:继承中的成员的特点
成员变量
成员变量
this关键字:代表当前对象的引用
super关键字:代表父类的存储空间
this:是为了区分成员变量和局部变量重名的情况
super:是为了区分子父类中成员变量重名的情况
成员函数
当子父类中出现相同函数的时候,会出现函数的覆盖(重写,复写),也就是子类中的函数覆盖了父类中的同名函数
这个就是函数的重写(overwriter)
函数的重载(overload)
依据:只和参数列表有关
如果子父类中函数相同的时候,需要使用super调用父类中的同名函数
构造函数
默认情况下子类在创建对象的时候都会调用父类的无参的构造函数。需要使用super语句
注意,这个super语句默认是在子类的构造函数的第一行,没有显示,如果显式调用super语句的话,也必须写到子类构造函数的第一行。
this()和super()的用法类似
this():表示调用当前类中的空参构造函数
super():表示调用父类中的空参构造函数
那也就意味着,在子类的构造函数中不能同时存在this和super语句。
总结:在子类的构造函数中,可以调用自己的构造函数,也可以调用父类的构造函数
如果需要在子类的构造函数中调用父类的有参构造函数,必须手工显式指定 super(name);
子类在创建对象的时候,一定会先调用父类的构造参数进行初始化。
3:final关键字
final关键字可以修饰不同东西
1:修饰类
这个类就是一个最终类,不能被继承。
2:修饰函数
这个函数就是一个最终函数,在子类中不能被覆盖。
3:修饰变量
这个变量的值就是一个最终值,不能被修改,只能被显式初始化一次。
final修饰的变量必须要被初始化。
一般使用final修改一个常量的时候会和static组合使用,注意:static和final的位置可以互换
如果在函数上定义static和final的时候,一般放在public后面 返回数据类型前面
总结:
1:当类中的所有函数不希望被重写的话,可以使用final修饰这个类,就变成了最终类,不能被继承。
2:当类中某一些方法不希望被重写的时候,需要在方法定义中加上final
3:如果变量的值是一个固定值,或者说是一个常量,这样可以使用final修改,一般还会加上static
4:抽象类
总结:
如果类中有抽象函数,那么类也必须是抽象的。
抽象类的特点
1:抽象类不能被new,因为调用抽象函数没有意义。
2:如果父类中有多个抽象函数,子类要么全部实现,要么子类定义成抽象的。
3:抽象类和普通类的区别只是说抽象类中有抽象方法而已,那也就是说抽象类中是有构造函数的,因为子类继承这个抽象类的时候,也需要Udine抽象类中的属性进行初始化。
4:抽象类中可以没有抽象方法
多个对象都必须具备相同的功能,但是具体的功能实现不一样,所以所这个时候在抽取父类的时候,需要在父类中定义一个抽象方法,强制子类去实现这个功能。
这个时候这个父类就可以称为是抽象类。
5:继承中的覆盖注意事项
1:子类想要重写父类中的函数,子类必须要保证自己的函数的访问权限大于等于父类中需要覆盖的函数的访问权限。
继承的出现提高了代码的复用性。
继承的出现让类与类之间产生了关系,提供了多态的前提。