多态、final、抽象类、接口
多态
概念:在继承/实现的前提下,子类重写父类的方法。多态的变现:对象多态、行为多态
格式:父类/接口 对象名 = new 子类()
特点:执行的是子类的方法,属性是没有多态的
好处:
- 实现解耦
- 作为方法的参数,接收一切的子类对象【可以提高代码的拓展性、维护性】
弊端:
- 多态的时候无法使用子类特有的功能
解决方案:强制类型转换
子类 对象名 = (子类) 对象名;
注意事项:在强转之前需要做类型的判断
对象名 instanceof 类型
使用场景:框架、方法参数
final
概念:代表最终的意思
特点:
- 修饰类: 类不能被继承【String】
- 修饰方法:方法不能被重写【模板方法设计模式】
- 修饰变量:变量只能被赋值一次 ,引用数据类型的地址值上的数据可以修改
使用场景:
- 常量、被static final 修饰的变量,命名规范:每个字母都需要大写,多个单词之间,通过下划线隔开
- 做系统的配置信息
抽象类
概念:抽象就是一个使用abstract修饰的类
格式:
public abstract class 类名{
public abstract 返回值类型 方法名(参数):
}
抽象方法的作用:强制子类一定重写某些方法
好处:更好实现多态
特点:
- 跟普通类比较,普通类有的内容它都有
- 不能创建对象
- 一个类继承了抽象类,要么重写所有的抽象方法,要么变成一个抽象类
使用场景:
- 如果我们需要抽取多个类相同的属性,以及方法,这些方法每个类又有不同的实现,我们就可以使用抽象类
模板方法设计模式
解决问题:
多个类中多个方法有很多相同代码
实现步骤:
- 先定义一个抽象类
- 定义一个final修饰的成员方法
- 把相同的代码方法这个方法中,不同的代码通过调用抽象方法
- 定义抽象方法【把不同的内容交给子类重写】