抽象
仅声明方法而不实现当中的逻辑,叫抽象方法,如果一个类中包括了抽象方法,则该类称为抽象类。
抽象类不能用来生成对象,它只能被子类继承,并于继承后完成未完成的抽象方法定义。
功能:
- 可以实现动态多态性
- 可以要求子类细化方法,让子类去具体实现
形式:
- 抽象类:用
abstract
关键字来修饰一个类 - 抽象方法:用
abstract
关键字修饰的一个方法
规则:
- 不能实例化,可以有属性、构造、方法,可以继承、派生,可以定义抽象类的引用变量
- 有抽象方法的类一定是抽象类,抽象类不一定有抽象方法
- 抽象类可以派生可实例化子类,在子类中重写所有的抽象方法
- 抽象类可以派生抽象类,可实例化类也可以派生抽象类
- 抽象类派生子类后,子类不重写抽象方法,子类应该也是抽象类
接口
提供给其他类调用方法的方法说明,其他类要遵从从接口描述的统一格式进行定义,接口就是要说明一组类能做什么,而不关心如何做
功能:
- 接口实现的动态多态性
- 接口让规范和实现分离,让系统的各组件之间通过接口耦合,是一种松耦合的设计
形式:
定义接口:
定义接口
实现接口:
实现接口
规则:
- 接口,不是类
- 接口没有构造,没有普通方法,没有普通属性
- 接口中的变量,自动为常量,通过接口名直接访问,并且不可修改
总结:
- 接口可以当作抽象的父类使用,为了实现动态多态
- 一个类可以实现多个接口,在类中要实现所有接口定义的方法
- 接口可以多继承,但是不推荐这么做
抽象类和接口的比较
类的继承:
- 父类中的方法若有功能,子类不用重写,父类功能一旦修改所有的子类都会发生修改,方便维护(当需求功能发生改变时,只需要修改一个父类即可)。
- 若子类重写了父类的方法,子类修改时不会影响其他类。
- 增加了类之间的耦合性。项目应该尽量做到高内聚低耦合。
接口的继承:
- 接口中只有规范,派生出的子类之间没有任何关联
- 子类需要单独维护
- 做到了高内聚低耦合
Student对象数组,每个Student对象包含学号、姓名、年龄三个private属性,可以通过get方法获取对应属性的值。通过接口的使用,让学生对象的排序修改更加方便,解决代码冗余问题。
GitHub源代码:studentsort
学生Student类代码截图:
Student Student类结构
排序接口CompareInterface :
接口代码
接口的实现类:根据学号比较类
接口的实现类
接口的实现类:根据学号比较类
接口的实现类
测试类:
测试类代码
运行结果截图:
运行结果
网友评论