美文网首页
Java的接口用途和方法

Java的接口用途和方法

作者: 鼾声鼾语 | 来源:发表于2020-07-02 08:49 被阅读0次

    1, 抽象类解决不了, 根本问题是Java的类不能多继承.
    因为Tiger类继承了动物Animal类的特性(例如 move() 和 drink()) , 但是严格上来将 捕猎(hunt())并不算是动物的特性之一. 有些植物, 单细胞生物也会捕猎的.
    所以Tiger要从别的地方来继承Hunt()这个方法. 接口就发挥作用了.
    2,也就是说, 接口不会限制实现接口的类的类型,Tiger类与Snake类不但继承了Animal的方法, 还继承(实现)了接口Huntable的方法, 一定程度上弥补java的class不支持多继承的特点.

    public void feedAnimal(Huntable hab, Animal a){
        this.bringAnimal(a,"Feeding Room");
        Animal ht = (Animal)hab;
        ht.move("Feeding Room");
        hab.hunt(a);
    }
    

    里面一样有一句强制转换:Animal ht = (Animal)hab
    3,什么情况下应该使用接口而不用抽象类.
    做个总结

    1. 需要实现多态
    2. 要实现的方法(功能)不是当前类族的必要(属性).
    3. 要为不同类族的多个类实现同样的方法(功能).
      下面是分析:
      3.1 需要实现多态
      很明显, 接口其中一个存在意义就是为了实现多态. 这里不多说了.
      而抽象类(继承) 也可以实现多态
      3.2. 要实现的方法(功能)不是当前类族的必要(属性).
      上面的例子就表明, 捕猎这个方法不是动物这个类必须的,
      在动物的派生类中, 有些类需要, 有些不需要.
      如果把捕猎方法卸载动物超类里面是不合理的浪费资源.
      所以把捕猎这个方法封装成1个接口, 让派生类自己去选择实现!
      3.3. 要为不同类族的多个类实现同样的方法(功能).
      上面说过了, 其实不是只有Animal类的派生类才可以实现Huntable接口.
      如果Farmer实现了这个接口, 那么农夫自己就可以去捕猎动物了...
      我们拿另个常用的接口Comparable来做例子.
      这个接口是应用了泛型,
      首先, 比较(CompareTo) 这种行为很难界定适用的类族, 实际上, 几乎所有的类都可以比较.
      比如 数字类可以比较大小, 人类可以比较财富, 动物可以比较体重等.
      所以各种类都可以实现这个比较接口.
      一旦实现了这个比较接口. 就可以开启另1个隐藏技能:
      就是可以利用Arrays.sort()来进行排序了.
      就如实现了捕猎的动物,
      可以被农夫Farmer喂兔子一样...
      4,有别的理解:
      ①全局变量定义
      ②如同上面的例子,我们去实现接口后,能够很明显清楚各个类具体实现类之间的关系,如果将自己的代码交给别人看的时候,他只需要看你所定义的接口就知道了你的类具体是干嘛的。换言之,你看别人的代码,如果别人的代码也是这样定义的,那么是不是改别人代码、看懂别人代码也容易很多了。所以,在之前笔者就说过:接口更像是一种定义的规范。

    原文地址:https://blog.csdn.net/nvd11/article/details/41129935?utm_source=blogxgwz9

    相关文章

      网友评论

          本文标题:Java的接口用途和方法

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