JavaSE基础知识(十九)--Java接口之多重继承

本文探讨Java中的接口如何实现多重继承,解释了Java与C++多重继承的区别,强调Java中接口的灵活性和避免名字冲突的重要性。通过代码示例展示了如何创建一个继承类并实现多个接口,同时指出接口的主要用途在于向上转型和确保类的抽象性。
摘要由CSDN通过智能技术生成

Java SE 是什么,包括哪些内容(十九)?

本文内容参考自Java8标准
再次感谢Java编程思想对本文的启发!
Java中实际上是有与C++中类似的真正意义上的多重继承,只不过,Java中是通过内部类来实现的。
如需了解真正意义上的多重继承,请参考博文:
JavaSE基础知识(二十)–Java内部类之为什么需要内部类
https://blog.csdn.net/ruidianbaihuo/article/details/101110436.
接口不仅仅只是一种 更纯粹形式的抽象类,它还有更高的目标。因为接口是根本没有任何具体实现的-----也就是说,接口可以没有任何相关的存储(越往后学你就会知道,类其实还有一个很重要的作用:数据存储,比如后面即将要谈到的数据结构的链表,栈,队列等),因此,多个接口的组合就成为了可能(因为没有存储,一个接口和多个接口只不过是一种形式上的表现,所以没有本质上的区别)。这一点是很有价值的,因为你有的时候需要去表示:“一个X是一个a和一个b以及一个c”。
在C++中,组合多个类的行为被称为多重继承。它可能会让你背负很沉重的包袱,因为每个类都有一个具体的实现(在前面继承的博文中提到过,子类将拥有它所继承的父类的所有实现,如果继承多个具有具体实现的父类,那么子类将变得非常臃肿,可能会难以使用)。
你可能会说,尽管父类中的方法有了实现,但是在子类中可以覆盖啊,最后依然可以运行自己的实现啊,确实可以,但是,子类的臃肿会大大减慢程序的运行效率,可能在每次执行的时候都会涉及到大量无关的代码(那些继承而来的父类实现)。
在Java中,你可以执行相同的行为,Java中的多重继承只能有一个是有具体实现的类(这个类可以是普通类,也可以是抽象类),其他的都是没有任何实现的接口。因此,C++中的问题不会在Java中发生(Java中的多重继承,只继承一个具有具体实现的类,其他的都是接口,那你的选择空间就很大了,你可以有目的性地去实现你希望实现的方法,其它暂时使用不上的方法,你可以空着,这样一来,子类不但具有可扩展性,还很轻便)。
如图:
Java中多重继承示意图
另:Java的多重继承中,没有强制要求一定要有一个抽象类或者是普通类,可以全部都是接口,如果有,那有且只能有一个是抽象类或普通类,其余的都必须是接口。
Java多重继承中堆接口的数量没有规定,可以implements任意多个接口,并可以向上转型为每个接口,因为每个接口都是一个独立类型。所有的接口名称都置于implements关键字之后,用逗号将它们一一隔开。

代码示例:
展示一个具体类组合数个接口之后产生了一个新类:

// 多重继承
   //接口CanFight,表示了能fight的类型
   interface CanFight{
   
      //方法fight(),至于怎么fight,由子类去实现
      void fight();
   }
   //接口CanSwin,表示了能swin的类型
   interface CanSwin{
   
      //方法swin(),至于怎么swin,由子类去实现
      //到底是自由泳、仰泳、蛙泳还是什么
      void swin();
   }
   //接口CanFly,表示了能fly的类型
   interface CanFly{
   
      //方法fly(),至于怎么fly,由子类去实现
      void fly();
   }
   //类ActionCharacter
   class
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值