美文网首页
Java面向对象:抽象和接口

Java面向对象:抽象和接口

作者: 我的袜子都是洞 | 来源:发表于2018-12-21 22:22 被阅读63次

    抽象

    仅声明方法而不实现当中的逻辑,叫抽象方法,如果一个类中包括了抽象方法,则该类称为抽象类。
    抽象类不能用来生成对象,它只能被子类继承,并于继承后完成未完成的抽象方法定义。

    功能:

    1. 可以实现动态多态性
    2. 可以要求子类细化方法,让子类去具体实现

    形式:

    • 抽象类:用abstract关键字来修饰一个类
    • 抽象方法:用abstract关键字修饰的一个方法

    规则:

    1. 不能实例化,可以有属性、构造、方法,可以继承、派生,可以定义抽象类的引用变量
    2. 有抽象方法的类一定是抽象类,抽象类不一定有抽象方法
    3. 抽象类可以派生可实例化子类,在子类中重写所有的抽象方法
    4. 抽象类可以派生抽象类,可实例化类也可以派生抽象类
    5. 抽象类派生子类后,子类不重写抽象方法,子类应该也是抽象类

    接口

    提供给其他类调用方法的方法说明,其他类要遵从从接口描述的统一格式进行定义,接口就是要说明一组类能做什么,而不关心如何做

    功能:

    • 接口实现的动态多态性
    • 接口让规范和实现分离,让系统的各组件之间通过接口耦合,是一种松耦合的设计

    形式:
    定义接口:


    定义接口

    实现接口:


    实现接口

    规则:

    • 接口,不是类
    • 接口没有构造,没有普通方法,没有普通属性
    • 接口中的变量,自动为常量,通过接口名直接访问,并且不可修改

    总结:

    1. 接口可以当作抽象的父类使用,为了实现动态多态
    2. 一个类可以实现多个接口,在类中要实现所有接口定义的方法
    3. 接口可以多继承,但是不推荐这么做

    抽象类和接口的比较

    类的继承:

    • 父类中的方法若有功能,子类不用重写,父类功能一旦修改所有的子类都会发生修改,方便维护(当需求功能发生改变时,只需要修改一个父类即可)。
    • 若子类重写了父类的方法,子类修改时不会影响其他类。
    • 增加了类之间的耦合性。项目应该尽量做到高内聚低耦合。

    接口的继承:

    • 接口中只有规范,派生出的子类之间没有任何关联
    • 子类需要单独维护
    • 做到了高内聚低耦合

    Student对象数组,每个Student对象包含学号、姓名、年龄三个private属性,可以通过get方法获取对应属性的值。通过接口的使用,让学生对象的排序修改更加方便,解决代码冗余问题。

    GitHub源代码:studentsort

    学生Student类代码截图:


    Student Student类结构

    排序接口CompareInterface :


    接口代码

    接口的实现类:根据学号比较类


    接口的实现类

    接口的实现类:根据学号比较类


    接口的实现类

    测试类:


    测试类代码

    运行结果截图:


    运行结果

    相关文章

      网友评论

          本文标题:Java面向对象:抽象和接口

          本文链接:https://www.haomeiwen.com/subject/hrhbkqtx.html