可以说接口存在的目的就是为了解决菱形继承问题。我们用例子来去讲解这个问题。

多重继承


最好的办法就是使用多重继承


新建一个宠物类,让猫和狗都去继承宠物类的属性和方法。但是这样就会导致一个问题。即菱形继承问题。

如果宠物类和动物类都有eat方法,作为一个猫类要想继承两个父类的话,到底是继承哪一种eat方法呢。这样的问题就称之为菱形问题。事实上,Java为了避免这样的问题,是不允许多重继承的。但是,如果你又想实现多重继承怎么办呢?毕竟多重继承也有好处。那么,就可以使用接口来去实现。

接口

接口解决菱形继承的办法是通过将全部的方法设为抽象,如此一来,子类要想继承就必须去实现这个方法。接口定义一般这么写:

public interface Pet{public abstract void play();
}

接口实现要这么写:

public class Dog extends Canine implements Pet{}

接下来具体举一个例子来展示接口如何解决菱形继承问题,我们依旧实现上图中的猫继承Animal和Pet中的eat方法的例子:

public class Animal {    public void eat() {System.out.println("使劲吃");}
}
public class Cat extends Animal implements Pet{//  public void eat() {//      System.out.println("慢点吃");
//  }   public static void main(String[] args) {Pet te = new Cat();te.eat();}}
interface Pet{void eat();
}

我们把接口的方法实现注释掉,Cat就会继承Animal的方法。反之,如果不注释的话,就实现接口中定义的方法。解决了菱形继承不知道继承哪一个的问题。

最后附上本文内容所对应的视频讲解

参考资料

《Head First Java》

Java接口存在的意义以及如何解决菱形继承问题相关推荐

  1. 虚继承:解决菱形继承问题

    文章目录 一.菱形继承 二.菱形继承问题 三.虚继承:解决菱形继承问题 ```羊驼类继承的实际是两个虚基类指针 vbptr (virtual base pointer),``` 四.虚继承代码 一.菱 ...

  2. [ANE for Android]Java接口部分引用第三方JAR的解决办法

    来自:http://bbs.9ria.com/thread-160445-1-1.html 前几天在做Android AIR 游戏时,集成国外支付平台的接口时候遇到了这样的问题. 详细描述: 平台的支 ...

  3. 继承菱形继承问题及解决

    继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类.继承呈现了面向对象程序设 ...

  4. Java接口,多态,向上转型,向下转型的意义

    接口 官方解释: Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现 ,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 包含 ...

  5. Java接口的作用和意义是什么?

    接口的定义 接口泛指实体把自己提供给外界的一种抽象化物(可以为另一实体),用以由内部操作分离出外部沟通方法,使其能被内部修改而不影响外界其他实体与其交互的方式. 人类与电脑等信息机器或人类与程序之间的 ...

  6. 对接第三方平台JAVA接口问题推送和解决

    对接第三方平台JAVA接口问题推送和解决 参考文章: (1)对接第三方平台JAVA接口问题推送和解决 (2)https://www.cnblogs.com/CreateMyself/p/7295879 ...

  7. JAVA中接口存在的意义

    很多JAVA程序员对于接口存在的意义很疑惑.不知道接口到底是有什么作用,为什么要定义接口.好像定义接口是提前做了个多余的工作.下面我给大家总结了4点关于JAVA中接口存在的意义: 1.重要性:在Jav ...

  8. 解决微信小程序请求后端接口碰到合法域名的问题 http-405j及java接口和数据接口的概念区分

    合法域名的问题 http-405 解决方案: @Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse res ...

  9. java接口的作用和意义_Java接口的作用与意义

    接口 1.接口的特点 首先看下面的这个抽象类代码: 抽象类代码中变量全为常量,方法全是抽象方法,这样的形式,我们可以将它们定义为接口类,书写方式如下: 接口的语法为: interface接口名{ 常量 ...

最新文章

  1. 推荐15个国外使用 CSS3 制作的漂亮网站
  2. 因缺失log4j.properties 配置文件导致flume无法正常启动。
  3. 怎样看python源代码-如何直接从IDE读取Python源代码
  4. macOS 如何正确安装 Xcode 合适版本
  5. 1个月教你学会用Python实现机器学习
  6. ECCV18 Oral | MVSNet: 非结构化多视点三维重建网络(高精度高效率,代码已开源)...
  7. TortoiseGit功能介绍
  8. 百度的一道 java 高频面试题的多种解法
  9. dns遭到劫持_关于网站pr劫持的问题,PR劫持是如何实现的呢?
  10. 训练模型以识别文本中的情绪 3 NLP 零到英雄 Training a model to recognize sentiment in text
  11. python 排列组合 数据量过大_Python 排列组合的实现
  12. 1099 PIPI的油田(使用查并集)
  13. java唱哪首歌好听_非常非常好听,但是非常非常难找的歌
  14. 【Arduino学习】01.开发板选择和环境的搭建
  15. 双十一来临,仓储物流快递安全保障解决方案
  16. 这应该是关于GPS定位写得最详实清晰的文章之一
  17. 360校园招聘2015技术类笔试题
  18. cydia多开微信_微信陌陌多开(N开)并且分开推送及一键隐藏教程
  19. DirectX12_入门之三角形
  20. java毕业设计艾灸减肥管理网站Mybatis+系统+数据库+调试部署

热门文章

  1. C++ algorithm库中的几个常用函数(swap,reverse,sort)
  2. Android下拉刷新开源库对比(转)
  3. [JQuery] jQuery选择器ID、CLASS、标签获取对象值、属性、设置css样式
  4. mybatis_基础篇
  5. mybatis pagehelper实现分页
  6. RSS - 简单方便的follow资讯
  7. php访问mysql工具类
  8. Linux模块机制浅析
  9. regex在.NET里判断输入信息的合法性
  10. VS2005解决方案的目录结构