MOOC 浙江大学 面向对象程序设计-Java笔记(6)

------------翁恺老师授课
第六次课程 抽象类与接口

  1. 设计框架时一定要让数据与表现分离
  2. 分离业务逻辑。对象只是一个对象,业务逻辑才决定如何处置对象。
  3. 不同类的对象之间远一点,再远一点,最好不要碰别的对象的核心数据。
  4. 对象的状态变化最好是由动作引起,不要简单地去设置对象的状态。

新建类、子类、抽象类、接口

新建类: 无法通过其他类的IS-A测试;
子类: 某类的特殊化版本,可能在原有类的基础上新增方法或修改方法;
抽象类: 定义子类的模板;
接口: 类还需要扮演的角色。

本文重点介绍抽象类:

类由两部分组成:成员变量和方法。

类中方法:

  • 全抽象 ---抽象类(特殊一点->接口)
  • 部分方法抽象,部分方法有方法体(构造方法不可以被申明为抽象方法) ----抽象类
  • 方法均有方法体

抽象类

  1. 抽象类除了被继承之外,没有任何用途,没有值,没有目的。
  2. 抽象类不能被实例化,但可以定义变量。(任何继承了抽象类的 非抽象类的对象 可以交付给抽象类定义的变量
  3. 类中只要有一个方法是抽象方法,该类必须申明为抽象类。
  4. 抽象类的子类(不为抽象类)必须覆盖抽象类中的所有抽象方法。
  5. 越往下继承,类内可提供的方法越来越多。

接口(interface)

接口是特殊的抽象类,100%纯抽象类,不允许存在方法体。

  1. 纯抽象类;
  2. 所有成员函数都是抽象函数,无任何方法体(无{},以 ;结束 );抽象函数前的 [public][abstract] 可有可无
  3. 所有成员变量都是public static final
  4. 接口之间可互相继承。

所有继承某一接口的类均需要实现接口中所有申明的函数(相同原型的成员函数)。当往接口中添加新方法时,必须将所有实现该接口的类改变。(非常复杂的过程,最后避免这个情况哦)

非常关键的特性: 若以接口取代具体的子类或抽象的父类作为参数或返回类型,此时可传入任何有实现该接口的类。

附:

  • 当使用父类或者接口定义的变量,若需要对其继承的子类或实现接口的类特殊处理时,可利用 instanceof 检查是否是那一类。常与向下造型配合使用。
  • 编译器是根据引用类型来判断有哪些方法可供使用的。
posted @ 2020-04-17 21:53  月夜沉沉  阅读(143)  评论(0编辑  收藏  举报