【面向对象】抽象&接口
1) 抽象类和抽象方法:
1. 抽象类不能直接new
2. 必须需要子类实现抽象类
3. 子类需要覆盖父类的抽象方法
4. 创建子类进行使用
注意事项:
1. 抽象类可以有构造函数,是供子类创建对象时,初始化父类成员使用的。
2. 抽象类中不一定包含抽象方法,但是有抽象方法的类必须定义为抽象类。
3. 抽象类的子类,必须重写子类中的所有抽象方法。否则编译报错。除非子类也是抽象类。
2) 接口:
1. 概念:就是多个类的公共规范,接口是一种引用数据类型,最重要的内容就是其中的抽象方法(usb接口,插座)
2. 接口的使用步骤:
i. 接口不能直接使用,必须有一个实现类来实现接口。
ii. 接口的实现类必须重写接口中所有的抽象方法。
iii. 创建实现类对象,进行使用。
注意事项:如果实现类并没有重写接口中的所有方法,那么这个实现类就必须是抽象类。
3. 接口可以包含、常量、抽象方法、默认方法、静态方法、私有方法
i. 默认方法:就是定义在接口中的静态方法。包含public default 方法名 { 方法体 }。
1) 作用:可以解决接口升级的问题,因为接口中添加新的抽象方法,其实现类必须全部重写,
2) 注意:并且可以通过接口实现类对象直接调用,也可以被接口实现类覆盖重写。
ii. 静态方法:就是定义在接口中的静态方法。包含public static 方法名 { 方法体 }。
1) 作用:不创建对象直接调用接口中的方法。静态方法和对象无关
2) 注意:不能通过接口实现类的对象来调用接口中的静态方法。而是直接用接口名称调用(一个类可以实现多个接口,多个接口中静态方法有可能产生冲突)
(默认方法和静态方法只有在java 8会以上版本才支持)
iii. 私有方法:就是在接口中定义private关键字的方法,默认接口中方法必须是public的。(私有方法只有在java 9 或以上版本才支持)
1) 普通私有方法:解决多个默认方法之间的重复代码问题 private 返回值类型 方法名称(参数列表){ 方法体 }
2) 静态私有方法:解决多个静态方法之间的重复代码问题 private static 返回值类型 方法名称(参数列表){ 方法体 }
3) 作用:某些场景,我们需要在接口中抽取一个公有的方法,来解决两个或多个方法之间代码重复的问题,并规定只能在接口中调用,就可以通过私有方法来解决。
iv. 常量:接口当中也可以定义“成员变量”。
1) 作用:如果程序中很多地方都需要用,而且值是固定不经常修改的就可以使用常量,优点:使程序易于阅读、易于扩展、更容易避免程序出现错误。
2) 注意:1. 需要用public static final 三个关键字进行修饰,常量一旦赋值不可修改。2. 接口中的常量必须赋值,不能不赋值。3.常量名称推荐大写,单词之间用“_”分割。
4. 类和接口的关系:
i. 类和类之间是单继承的,直接父类只有一个。
ii. 类和接口之间是多实现的,一个接口可以实现(implements)多个接口,注意处理抽象方法的冲突问题就行。
iii. 接口与接口之间是多继承的。就是一个接口可以继承(extends)多个接口,那么该接口就拥有了其他接口的全部抽象方法。
5. 注意事项(总结):
1) 接口不能有静态代码块或者构造方法。
2) 一个类的直接父类是唯一的,但是一个类可以同时实现多个接口。
3) 如果实现类所实现的接口中,存在重复的抽象方法,那么只需要重写覆盖一次即可。
4) 如果实现类没有覆盖重写所有接口当中的所有抽象方法,那么实现类就必须是一个抽象类。
5) 如果实现类实现的多个接口当中,存在重复的默认方法,那么实现类就必须冲突的默认方法进行重写。
6) 如果一个类的直接父类当中的方法,和接口当中的默认方法产生了冲突,会优先用父类的方法。(先继承,后实现的特点)。

浙公网安备 33010602011771号