JAVASE——面向对象高级(二)
面向对象高级(二)
一、多态
1.1 多态的概述
多态:是在继承、实现情况下的一种现象,表现为:对象多态、行为多态。
对象多态:父类变量 接收了 子类对象的现象
1
2
3// Teacher和Student都是People的子类
People p1 = new Student();
People p2 = new Teacher();p1和p2都是People类型,但是p1和p2指向的对象不一样。
行为多态:
1
2p1.run();
p2.run();p1和p2都可以调用run方法,但是两个run方法表现的行为不一样。
1.2 多态的好处
1. 在多态形式下,右边的代码是解耦合的,更便于扩展和维护。
刚开始p1指向Student对象,run方法执行的就是Student对象的业务;假如p1指向Teacher对象 ,run方法执行的自然是Teacher对象的业务。
也就是说,等号的右边是可以根据需要的子类替换的。
2. 定义方法时,使用父类类型作为形参,可以接收一切子类对象,扩展行更强,更便利。
1 |
|
1.3 类型转换
多态的缺点:在多态形式下,不能调用子类特有的方法,比如在Teacher类中多了一个teach方法,在Student类中多了一个study方法,这两个方法在多态形式下是不能直接调用的。
多态形式下不能直接调用子类特有方法,但是转型后是可以调用的。这里所说的转型就是把父类变量转换为子类类型。格式如下:
1 |
|
原本是什么类型,才能还原成什么类型
二、final关键字
2.1 特点
final关键字是最终的意思,可以修饰类、修饰方法、修饰变量。
1 |
|
2.2 常量
常量:被static final 修饰的成员变量。 通常用于记录系统的配置信息。
如:public static final String SCHOOL_NAME = "Wendy"
三、抽象
在Java中有一个关键字叫abstract,它就是抽象的意思,它可以修饰类也可以修饰方法。注:抽象方法不允许由方法体。
3.1 抽象类
1 |
|
抽象类是不能创建对象的,如果抽象类的对象就会报错
抽象类可以作为父类让子类继承。而且子类继承父类必须重写父类的所有抽象方法。
子类继承父类如果不复写父类的抽象方法,这个子类也必须是抽象类
1
2
3
4// B类继承A类,此时B类也是抽象类,这个时候就可以不重写A类的抽象方法
public abstract class B extends A{
}
3.2 好处
场景:要求两个对象 有共同的属性,也有一个行为,但是具体的行为实现方法不一样。这是,可以把这个行为写作一个抽象的方法。
抽象父类:
1 |
|
子类Dog:
1 |
|
子类Cat:
1 |
|
测试类:
1 |
|
1 |
|
3.3 模板方法模式
设计模式是解决某一类问题的最优方案
模板方法模式解决了多个子类中有相同代码的问题
1 |
|
四、接口
4.1 接口
Java提供了一个关键字interface,用这个关键字来定义接口这种特殊结构。格式如下
1 |
|
例如:
1 |
|
使用A类:
1 |
|
- 接口类 是用来 被类实现(implements)的,我们称之为实现类
- 一个类可以实现多个接口,实现接口时必须重写接口的所有抽象方法。
4.2 接口的好处
- 弥补了 单继承的不足,一个类可以同时实现多个接口
- 让程序可以 面向接口编程
4.3 案例
考虑:
写一个 接口, 表示学生信息管理的两个功能。
写两个实现类,实现两套方案的业务实现。