继承
继承的好处和弊端:
-
好处:提高了代码的(复用性,维护性),是多态的前提
-
弊端:降低了代码的灵活性,增强了代码的耦合性
继承的特点:
Java只支持单继承,不支持多继承,但支持多层继承
继承的成员变量访问特点
*在子类方法中访问一个变量*
-
子类局部范围找
-
子类成员范围找
-
父类成员范围找
注意:如果子父类中,出现了重名的成员变量,通过就近原则,会优先使用子类的变量,如果一定要使用父类的,可以通过关键字进行区分
;
继承中成员方法的访问特点:
通过子类对象访问一个方法
-
子类成员范围找
-
父类成员范围找
方法重写
概念:在继承体系中,子类出现了和父类中一模一样的方法申明;
方法重写的应用场景:当子类需要父类的功能,而功能主题子类有自己特有的内容,可以重写父类中的方法,这样既沿袭了父类的功能,又定义了子类特有的内容;
注意事项:1. 父类中私有方法不能被重写;2. 父类静态方法,子类必须通过静态方法进行重写,父类非静态方法,子类也必须通过非静态方法进行重写
抽象类
抽象类概述
抽象方法:将共性的行为(方法)抽取到父类之后,发现该方法的实现逻辑无法在父类中给出具体明确,该方法就可以定义为抽象方法(无方法体)
抽象类:如果一个类中存在抽象方法,那么该类就必须为抽象类
抽象类注意事项
-
抽象类不能实例化
-
抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
-
可以有构造方法
-
抽象类的子类
-
要么重写抽象类中的所有抽象方法
-
要么是抽象类(不推荐)
-
final关键字
final关键字是最终的意思,可以修饰(方法,变量,类)
final修饰的特点:
-
修饰方法:表明该方法是最终方法,不能被重写;
-
修饰变量:表明该变量是常量,不能再次被赋值;
-
在创建的时候,直接给值
-
在构造方法结束之前,完成赋值
-
-
修饰类:表明该类是最终类,不能被继承;
-
基本数据类型变量:其值不能被改变
-
代码块
代码块概述与分类
在Java中,使用{}括起来的代码被称之为代码块
分类:
-
局部代码块
-
位置:方法中定义;
-
作用:限定变量的生命周期,及早释放,提高内存利用率
-
-
构造代码块
-
位置:类中方法外定义
-
特点:每次构造方法执行时,都会执行该代码块中的代码,并且在构造方法执行前执行
-
作用:将多个构造方法中相同的代码,抽取到构造代码块中,提高代码的复用性
-
-
静态代码块
-
位置:类中方法外定义
-
特点:需要通过static关键字修饰,随着类的加载而加载,并且只执行一次
-
作用:在类加载的时候做一些数据初始化的操作
-
接口
接口介绍
当一个类中的所有方法都是抽象方法的时候,我们就可以将其定义为接口,接口也是一种引用数据类型,它比抽象类还要抽象
接口的定义和特点
-
接口用的关键字interface来定义
public interface 接口名{}
-
接口不能实例化
-
接口和类之间是实现关系,通过implements关键字表示
public class 类名 implements 接口名{}
-
接口的子类(实现类)
要么重写接口中的所有抽象方法
要么是抽象类(该选择不推荐)
注意:接口和类的实现关系,可以单实现,也可以多实现。
public class 类名 implements 接口名1,接口名2{}
接口中成员的特点
-
成员变量
只能是常量
默认修饰符:public static final
-
构造方法
没有
-
成员方法
只能是抽象方法
默认修饰符:public abstract
JDK8版本接口成员的特点
-
JDK8版本后
-
允许在接空中定义抽象方法,但是需要使用关键字default修饰,这些方法就是默认方法
-
作用:解决接口升级的问题
-
-
接口中默认方法的定义格式
-
格式:public default 返回值类型方法名(参数列表){}
-
范例:public default void show(){}
-
-
接口中默认方法的注意事项
-
默认方法不是抽象方法,所以不强制被重写,但是可以被重写,重写的时候去掉default关键字
-
public可以省略,default不能省略
-
如果实现了多个接口,多个接口中存在相同的方法声明,子类就必须对该方法进行重写
-
接口的使用思路
-
如果发现一个类中所有的方法都是抽象方法,那么就可以将该类改进为一个接口;
-
涉及到了接口大面积更新方法,而不想去修改每一个实现类,就可以将更新的方法定义为带有方法体的默认方法;
-
希望默认方法调用的更加简洁,可以考虑设计为static静态方法。(需要去掉default关键字)
-
默认方法中出现了重复的代码,可以考虑抽取出一个私有方法;(需要去掉default关键字)
类和接口的关系
-
类和类的关系
继承关系,只能单继承,但是可以多层继承
-
类和接口的关系
实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口
-
接口和接口的关系
继承关系,可以单继承,也可以多继承