多态
多态
-
总结:多态是一种代码现象 也是一种思想
-
定义:一个对象,在不同时刻表现出来的多种形态
-
前提:
- 存在继承/实现关系
- 子类重写父类方法/实现类重写接口方法
- 父类引用指向子类对象/接口引用指向子类对象
-
程序执行时的特点:
- 成员变量 编译时 执行时均看 引用数据类(看左边)
- 成员方法 编译时 看左边 运行时 看对象 (看右边)
-
多态的好处
- 提高了代码的扩展性:传参用父类 可以接受任何子类类型 ,在增加方法体内容时,不影响原来代码 不用额外写方法,甚至不用改方法----
-
弊端
- 不能使用子类特有的功能
-
转型
-
向上转型
父类引用指向子类对象 多态的前提(感觉java又做了点什么)
-
向下转型
父类引用转为子了对象 (类似与强转) 用来解决弊端 使用子类特有功能
强制转化前 可以使用
instanceof进行类型判断
-
抽象类
-
定义:与具体类相对应,是一类事物的一个统称的类;
例如: 动物类 人类 员工类是抽象类 我说动物,你知道我说的是什么动物吗?只有看到了具体的动物,你才知道 猫类 男人类 程序员类 是具体类 -
语法
public abstract class 类名
-
功能
对具体类的抽象 用抽象方法来定义规则 提取一类具体类的共同特征到一般的成员方法和成员变量
-
特点:
-
抽象类本身特点
- 不能被实例化 可以用多态方式创建子类对象
- 抽象类的子类 要么为抽象类 要么重写所有抽象方法
-
成员特点
-
成员方法 成员变量 有或无 都行
-
抽象方法(无方法体) 有或无 都行
抽象方法语法: public abstract 返回值类型 方法名 (参数列表);
-
有抽象方法的类必须为抽象类
-
-
构造方法
为子类 提供服务 但是无法直接创建对象---可能存在抽象方法
-
-
使用:多态写法 1.创造抽象类的子类2.重写所有抽象方法3.抽象类引用指向子类对象
接口
-
定义:一种公共的规范标准,只要符合规范标准大家都可以通用接口
-
功能:对行为的抽象 定义规则
-
成员特点
-
成员变量都是常量 即 public static final 变量类型 变量名
-
成员方法都是抽象方法 即 public abstract 返回值类型 方法名
-
没有构造方法 无法直接创建对象--都是抽象方法
成员变量 都是静态的 已经在堆中完成了初始化 无需构造方法
-
-
接口的"子类"
-
实现类 重写全部抽象方法 (extends)
-
接口 扩展自身功能 (implements)
-
抽象类 扩展功能 (extends)
-
JDK1.8 -1.9新特性
-
1.8 增加默认方法
语法:public defalut 返回值类型 方法名(){}
注意事项:可以定义多个 defalut不能省略 用来抽取实现类中都有的方法
-
1.8 增加静态方法
注意事项:接口的静态方法只能通过 接口名调用 不能通过实现类名或者对象名调用
-
1.9 增加私有方法
为1.8添加的方法服务 抽取公共的代码到方法
-
类 接口 抽象类 的关系
| 先右后下 | 类 | 接口 | 抽象类 |
|---|---|---|---|
| 类 | 单继承 | 多实现 | 单继承 |
| 接口 | 多继承 | ||
| 抽象类 | 单继承 | 多实现 | 单继承 |
抽象类可以选择性实现接口来扩展功能
由于存在继承关系 抽象类的所有抽象方法 子类必须全部重写
可以选择 实现或 不实现接口 来确定是否扩展功能

浙公网安备 33010602011771号