------------翁恺老师授课
第六次课程 抽象类与接口
- 设计框架时一定要让数据与表现分离
- 分离业务逻辑。对象只是一个对象,业务逻辑才决定如何处置对象。
- 不同类的对象之间远一点,再远一点,最好不要碰别的对象的核心数据。
- 对象的状态变化最好是由动作引起,不要简单地去设置对象的状态。
新建类、子类、抽象类、接口
新建类: 无法通过其他类的IS-A测试;
子类: 某类的特殊化版本,可能在原有类的基础上新增方法或修改方法;
抽象类: 定义子类的模板;
接口: 类还需要扮演的角色。
本文重点介绍抽象类:
类由两部分组成:成员变量和方法。
类中方法:
- 全抽象 ---抽象类(特殊一点->接口)
- 部分方法抽象,部分方法有方法体(构造方法不可以被申明为抽象方法) ----抽象类
- 方法均有方法体
抽象类
- 抽象类除了被继承之外,没有任何用途,没有值,没有目的。
- 抽象类不能被实例化,但可以定义变量。(任何继承了抽象类的 非抽象类的对象 可以交付给抽象类定义的变量)
- 类中只要有一个方法是抽象方法,该类必须申明为抽象类。
- 抽象类的子类(不为抽象类)必须覆盖抽象类中的所有抽象方法。
- 越往下继承,类内可提供的方法越来越多。
接口(interface)
接口是特殊的抽象类,100%纯抽象类,不允许存在方法体。
- 纯抽象类;
- 所有成员函数都是抽象函数,无任何方法体(无{},以 ;结束 );抽象函数前的 [public][abstract] 可有可无
- 所有成员变量都是public static final;
- 接口之间可互相继承。
所有继承某一接口的类均需要实现接口中所有申明的函数(相同原型的成员函数)。当往接口中添加新方法时,必须将所有实现该接口的类改变。(非常复杂的过程,最后避免这个情况哦)
非常关键的特性: 若以接口取代具体的子类或抽象的父类作为参数或返回类型,此时可传入任何有实现该接口的类。
附:
- 当使用父类或者接口定义的变量,若需要对其继承的子类或实现接口的类特殊处理时,可利用 instanceof 检查是否是那一类。常与向下造型配合使用。
- 编译器是根据引用类型来判断有哪些方法可供使用的。