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,什么情况下应该使用接口而不用抽象类.

做个总结

需要实现多态

要实现的方法(功能)不是当前类族的必要(属性).

要为不同类族的多个类实现同样的方法(功能).

下面是分析:

3.1 需要实现多态

很明显, 接口其中一个存在意义就是为了实现多态. 这里不多说了.

而抽象类(继承) 也可以实现多态

3.2. 要实现的方法(功能)不是当前类族的必要(属性).

上面的例子就表明, 捕猎这个方法不是动物这个类必须的,

在动物的派生类中, 有些类需要, 有些不需要.

如果把捕猎方法卸载动物超类里面是不合理的浪费资源.

所以把捕猎这个方法封装成1个接口, 让派生类自己去选择实现!

3.3. 要为不同类族的多个类实现同样的方法(功能).

上面说过了, 其实不是只有Animal类的派生类才可以实现Huntable接口.

如果Farmer实现了这个接口, 那么农夫自己就可以去捕猎动物了...

我们拿另个常用的接口Comparable来做例子.

这个接口是应用了泛型,

首先, 比较(CompareTo) 这种行为很难界定适用的类族, 实际上, 几乎所有的类都可以比较.

比如 数字类可以比较大小, 人类可以比较财富, 动物可以比较体重等.

所以各种类都可以实现这个比较接口.

一旦实现了这个比较接口. 就可以开启另1个隐藏技能:

就是可以利用Arrays.sort()来进行排序了.

就如实现了捕猎的动物,

可以被农夫Farmer喂兔子一样...

4,有别的理解:

①全局变量定义

②如同上面的例子,我们去实现接口后,能够很明显清楚各个类具体实现类之间的关系,如果将自己的代码交给别人看的时候,他只需要看你所定义的接口就知道了你的类具体是干嘛的。换言之,你看别人的代码,如果别人的代码也是这样定义的,那么是不是改别人代码、看懂别人代码也容易很多了。所以,在之前笔者就说过:接口更像是一种定义的规范。

java同样作用的方法_Java的接口用途和方法相关推荐

  1. java调用接口实现的方法_java调用接口的实现方法

    java调用接口的实现方法 发布时间:2020-06-29 11:08:46 来源:亿速云 阅读:78 作者:Leah 本篇文章给大家分享的是有关java调用接口的实现方法,小编觉得挺实用的,因此分享 ...

  2. java 子类的同名方法_java 父类子类有同名方法时如何调用的实现

    父类引用默认调用子类重写的方法 如果父类的引用p指向了子类的实例,则通过这个引用p访问同名方法时,调用的是子类重写的方法. 父类引用p可以指向不同的子类,调用不同子类重写的不同的同名方法,进而达到类间 ...

  3. java定义接口的方法_java定义接口的方法

    java定义接口的方法 发布时间:2020-06-28 13:50:49 来源:亿速云 阅读:103 作者:Leah 本篇文章为大家展示了java定义接口的方法,代码简明扼要并且容易理解,绝对能使你眼 ...

  4. Java集合迭代器原理图解_Java Iterator接口遍历单列集合迭代器原理详解

    这篇文章主要介绍了Java Iterator接口遍历单列集合迭代器原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Iterator接口概述 ...

  5. java interface作用是什么_Java注解总结:史上最全,有这一篇就够了

    什么是注解? 注解的定义 官网描述如下: Java 注解用于为 Java 代码提供元数据.作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的.Java 注解是从 Jav ...

  6. java中作用是什么_Java在编程中的作用是什么?

    2017-07-28 Java编程中更新XML文档的常 JAXP是Java API for XML Processing的英文字头缩写,中文含义是:用于XML文档处理的使用Java语言编写的编程接口. ...

  7. java读取mysql数据库配置文件_java读取properties文件的方法

    Java 读写Properties配置文件 Java 读写Properties配置文件 1.Properties类与Properties配置文件 Properties类继承自Hashtable类并且实 ...

  8. java clone方法_java安全编码指南之:方法编写指南

    简介 java程序的逻辑是由一个个的方法组成的,而在编写方法的过程中,我们也需要遵守一定的安全规则,比如方法的参数进行校验,不要在assert中添加业务逻辑,不要使用废弃或者过期的方法,做安全检查的方 ...

  9. java 内联调用深度_Java中内联虚拟方法调用的性能

    java 内联调用深度 总览 动态编译的好处之一是它能够支持在虚拟方法代码上的广泛方法内联. 内联代码可提高性能时,代码仍必须检查类型(以防由于优化而更改了类型)或在多个可能的实现之间进行选择. 这导 ...

最新文章

  1. 分布式系统 一致性模型的介绍 以及 zookeeper的 “线性一致性“ 讨论
  2. python 正则表达式 截取特定字符串之后的全部内容
  3. 构建多域名Exchange 2010邮件系统
  4. 常见TS权限问题“通过终端服务访问”
  5. 计算机网络 | 网络基础 :网络协议,协议分层,数据封装与分用,地址管理,字节序
  6. [Leedcode][JAVA][第820题][字典树][Set]
  7. 创建初始脚本工具mkscript.sh
  8. nyoj--38--布线问题
  9. Atitit 软件与开发的未来趋势 attilax总结 1.1. Sdx软件重构世界 软件定义未来 1 1.2. 《软件和信息技术服务业发展规划(2016-2020年)》( 2 1.3. Iot物联
  10. 趋势 | 或许,这就是大佬吧!——美国ETF产业三巨头格局浅谈
  11. 机器学习:心血管疾病数据分析
  12. 3d3s9.0硬件复制狗
  13. 【APP】模拟器的学习和使用
  14. 通过 Docker 化一个博客网站来开启我们的 Docker 之旅
  15. 友善串口工具接收数据随机换行_mfc串口收发数据。编辑框希望每接收一次就换行。怎么实现。我的换行结果不对...
  16. adb 连接安卓手机远程调试
  17. 市场上还有多少沈昌宇 揭秘庄家操盘手法
  18. 一种简单的贝塞尔插值算法
  19. 复旦大学计算机学院课表,复旦大学研究生课程表.PDF
  20. 伯克利大学sawyer机器人环境配置

热门文章

  1. Java LinkedList对象的clone()方法和示例
  2. c语言cin输入数组,C++基础:各种输入方法总结cin.get()、
  3. stl vector 函数_vector :: front()函数以及C ++ STL中的示例
  4. 使用uuid作为数据库主键,被技术总监怼了!
  5. 字符串操作的12个小技巧!
  6. 面试官:不会看SQL执行计划,简历也敢写精通SQL优化?
  7. Python对IP地址列表排序、对列表进行去重、IP地址与MAC地址组合的多个元组的列表排序
  8. http协议知识msdn
  9. Synchronized 和 Lock 区别
  10. c语言既能读字母也能读数字,2014计算机二级考试C语言考前预测选择题