zoukankan      html  css  js  c++  java
  • java编程思想第九章接口

    9.1抽象类和抽象方法

      为什么要有抽象类?

        是希望通过通用接口操作一系列类。

      那么抽象类的形式是什么样的呢?

        声明类的使用使用abstract关键字,且在该类中应该具有抽象方法。

      注:抽象方法被关键字abstract方法修饰。

        编译器会禁止我们对抽象类进行实例化。

    9.2接口

      接口是对抽象类更进一步的抽象。

      接口声明时使用interface关键字,接口中的域都是隐式添加关键字:public static与final。

      接口想被导出类实现需要通过关键字implement来完成。

      接口中的方法是被默认定义为public abstract的。

    9.3完全解耦

      使用策略模式,适配器模式,代理模式完成完全解耦。

    9.4多重继承

      接口与接口之间是可以通过多重继承来提升接口的功能的。

    9.5通过继承来扩展接口

      在使用继承扩展接口时,请避免将不同接口中的名字定义为一样的。这样会导致编译异常。

    9.6适配接口

      通过适配器模式将类与接口进行适配。

    9.7接口中的域

      接口中的域默认都是public static final的。

    9.8嵌套接口

      在实现接口时,并不需要实现嵌套在其内部的任何接口

    9.9接口与工厂

      通过工厂模式来创建接口的实现对象。

      提供一些复用的机制。

    总结:

      实际上工作中,接口是否存在滥用的情况吗(指service与dao层的接口)?

      目前来说还是看不到的,或许自己对框架的理解不够深刻?

      但是通过接口来提供模板是一种很好的实现方式。也是一种很好的编程思路。

      除此之外,在项目中间接口的使用还是相对较少的。

      还是需要累积更多经验,要多思考啊!


    抽象类与普通类的区别:

      1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类无法实现该方法,)缺省情况下默认为public。

      2)抽象类不能够用来创建对象。

      3)如果一个类继承抽象类,则必须实现父类的抽象方法;否则的话,子类也必须定义为abstract类。

    接口:

      1)接口中的变量会隐式地指定为public static final变量。

      2)非抽象类实现接口必须重写接口中的方法;若是抽象类,可以不实现该接口中的抽象方法。

    抽象类与接口的区别:

    1)语法层面的区别:

      a)抽象类可以提供成员方法的实现,而接口中只能存在public abstract方法。

      b)抽象类中的成员变量是可以是各种类型的,而接口中的成员变量只能是public static final类型的。(这里使用成员变量这个词,实际上应该使用类变量,因为这里用到了static这个关键字)。

      c)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块与静态方法。

      d)一个类只能继承一个抽象类,而一个类可以实现多个接口。

    2)设计层面来说:

      抽象类是对事物的一种抽象,即对类的抽象。接口是一种行为的抽象。

      继承抽象类,对子类来说,是一种“是不是”的关系。(即是不是某一种类事物,鸟类为抽象基类的话,乌鸦是鸟类,鸽子也是鸟类)。

      实现接口,对于子类来说,是一种“能不能”的关系。(飞行是一个接口,飞机和乌鸦都实现这个接口,实现飞翔的能力)。

     

    本文参考:java编程思想中文版第四版。

         海子的个人博客:深入理解java的接口和抽象类

      

  • 相关阅读:
    Android 弹性布局 FlexboxLayout了解一下
    设计模式——适配器模式
    UML类图中的六种关系(物理设计阶段)
    设计模式——策略模式
    Kaggle-tiantic数据建模与分析
    数据预处理—独热编码
    推荐系统-协同过滤
    推荐系统实战-冷启动问题
    推荐系统-协同过滤原理与实现
    Hadoop生态系统之Yarn
  • 原文地址:https://www.cnblogs.com/lilinzhiyu/p/8283744.html
Copyright © 2011-2022 走看看