3.4 oop
接口、抽象类、具体类
1、Object对象:
- state——fields
- behavior——methods
2、Classes类——fields+methods
- class vs instance(实例)
![](https://i-blog.csdnimg.cn/blog_migrate/212d86ea79b7da719e08f4da95838c16.jpeg)
- static vs instance
![](https://i-blog.csdnimg.cn/blog_migrate/8fbf8cacce94c99bc6fd8613d2371ec2.jpeg)
3、接口Interface
- Interface和Class: 定义和实现A
- 接口之间可以继承
- 一个类可以实现多个接口
- 一个接口可以有多种实现
过程:
- 设计一个接口 public interface complex{ } 确定ADT规约
- 某个类class implements 接口complex 对ADT做具体的实现
- 调用类中函数
4、抽象类 abstract
- 抽象方法Abstract method:方法只有标识没有具体实现
抽象类:包含抽象方法的类
接口:可以看成是一个类中只有抽象方法
Concrete class ---> Abstract Class ---> Interface
- 在子类中具体实现抽象函数
继承、override
extends
- 严格继承:子类只能添加新方法,无法重写超类中的方法;
- 如果不能被重写overwrite,函数前有final修饰
- 空函数可以在子类中重写overwrite
2、override(覆盖/重写)
- 重写时调用supper
![](https://i-blog.csdnimg.cn/blog_migrate/c76763d7aee5c2c6d16522378ae3d64a.jpeg)
- 重写时不要改变原方法的本意
多态Polymorphism、overload
1、多态Polymorphism
- Ad hoc polymorphism (特殊多态):功能重载
一个函数可能有多种类型,而且这些不同类型的函数行为不相关
更多见下文Overload
![](https://i-blog.csdnimg.cn/blog_migrate/c7f4f4b14fdc86f124e8e520d2b52b18.jpeg)
- Parametric polymorphism (参数化多态) 泛型
一些类型中呈现出一定的结构 具体见下文泛型
- 子类型多态
子类型的规约不能弱化超类型的规约
不同类型的对象可以统一的处理而无需区分
2、Overload 重载
- 多个方法具有同样的名字,但有不同的参数列表或返回值类型;
- 方便client调用,client可用不同的参数列表,调用同样的函数;
![](https://i-blog.csdnimg.cn/blog_migrate/2f233b97aafe8bf049d9cad70260f1fd.jpeg)
- 是一种静态多态:根据参数列表进行最佳匹配;静态类型检查;在编译阶段时决定要具体执行哪个方法 (static type checking) (与之相反,overridden methods则是在run-time进行dynamic checking)
- Overload规则
![](https://i-blog.csdnimg.cn/blog_migrate/7b2b00154bd424889164e790e97c5cc2.jpeg)
- Override vs Overload
重写时保持不变,重载时改变。具体看下图
![](https://i-blog.csdnimg.cn/blog_migrate/e001da74395d18ba80c9d064b14f9e4a.jpeg)
泛型
泛型变量,泛型类、泛型接口、泛型方法
泛型接口
- 泛型接口,非泛型的实现类
![](https://i-blog.csdnimg.cn/blog_migrate/fee5eb1bc7fd35180f03592d340f2e28.jpeg)
- 泛型接口,泛型的实现类