按照理解,一般都是说Java 类是单继承,但可以实现多个接口。但是可以通过接口来实现类的多继承。(如何通过接口来实现多继承???)

那么就一直以为Java里面是单继承,今天看FutureTask源码的时候发现,接口居然可以实现多继承,通过下面例子学习下。

一个类只能extends一个父类,但可以implements多个接口。java通过使用接口的概念来取代C++中多继承。与此同时,一个接口则可以同时extends多个接口,却不能implements任何接口。因而,Java中的接口是支持多继承的。

下面先对接口做个总结:

1>接口中的成员变量默认都是public,static,final(都可省略),必须被显示初始化,即接口中的成员变量必须是常量。

2>接口中的方法默认都是public abstract类型的(都可省略),没有方法体。

3>接口中只能包含public abstract类型的成员方法和public static final类型的成员变量。

4>接口中没有构造方法,不能被实例化

5>一个接口不能实现(implements)另一个接口,但是可以多继承接口

6>Java中必须通过类来实现接口中的抽象方法

7>当类实现了某个Java接口时,它必须实现接口中的所有抽象方法,否则这个类必须声明为抽象类

8>不允许创建接口的实例(实例化),但允许定义接口类型的引用变量,该引用变量引用实现了这个接口的类的实例

9>一个类只能继承一个直接的父类,但可以实现多个接口,间接的实现了多继承

下面给一个接口多继承的例子,注意打印的a的值

1 packageLesson1218Thread;

2

3 public interfaceTestIFA {

4 int a = 0;

5 int b = 1;

6 int c = 2;

7

8 voidprintInfo();

9

10 }

11

12 packageLesson1218Thread;

13

14 public interfaceTestIFB {

15 int a = 4;

16 int b = 5;

17 int c = 6;

18

19 voidprintInfo();

20 }

21

22 packageLesson1218Thread;

23

24 public interface TestIFC extendsTestIFA,TestIFB {

25 //int d = 4;

26 int a = 7;

27 }

28

29 packageLesson1218Thread;

30

31 public class IFDemo implementsTestIFC{

32

33 public static voidmain(String[] args) {

34

35 IFDemo ifdemo = newIFDemo();

36 System.out.println("a is "+ifdemo.a); //a is 7, 因为这个地方实现接口TestIFC, 若是TestIFB, 则输出a is 4.

37

38 }

39

40 @Override

41 public voidprintInfo() {

42 System.out.println("which IF ?????");

43

44 }

45

46 }

重点关注line36,   测试类实现哪个接口,输出的a就是哪个接口定义的值。

问题1:若同时实现两个接口,调用里面相同变量 , 编译错误。 如下:

1 packageLesson1218Thread;

2

3 public class IFDemo implementsTestIFA,TestIFC{ //同时实现两个接口

4

5 public static voidmain(String[] args) {

6

7 IFDemo ifdemo = newIFDemo();

8 System.out.println("a is "+ifdemo.a); //编译错误

9

10 }

11

12 @Override

13 public voidprintInfo() {

14 System.out.println("which IF ?????");

15

16 }

17

18 }

line8 会报编译错误: The field ifdemo.a is ambiguous

程序不能找到应该调用哪个里面的a.

结论:接口多继承时,接口里面有定义相同的变量,如果实现类要调用相同变量,必须显示指出来。如 TestIFA.a 。

问题2:同时实现两个接口,若接口中的成员方法名字相同,但是返回值不一样,

1 packageLesson1218Thread;

2

3 public interfaceTestIFA {

4 int a = 0;

5 int b = 1;

6 int c = 2;

7

8 voidprintInfo();

9

10 }

11

12 packageLesson1218Thread;

13

14 public interfaceTestIFB {

15 int a = 4;

16 int b = 5;

17 int c = 6;

18

19 String printInfo();

20 }

21

22 packageLesson1218Thread;

23

24 public interface TestIFC extendsTestIFA,TestIFB { //编译错误

25 //int d = 4;

26 int a = 7;

27 }

接口TestIFA中含有成员方法voidprintInfo();   而接口TestIFB中含有成员方法String printInfo();  两个成员方法返回值不一样。

接口TestIFC想继承上面两个类,编译错误。The return types are incompatible for the inherited methods TestIFA.printInfo(), TestIFB.printInfo()

结论:被多继承的接口中,不能有方法名相同,但是返回值不一样的函数。否则没法多继承。

java接口的继承_Java 接口多继承相关推荐

  1. java实验报告答案_Java实验报告--继承与接口

    学院 专业 班.学号 姓名 教师评定_________________ 实验题目 继承与接口 一. 实验目的与要求 实验目的: 1.掌握类的继承关系. 2.掌握接口的定义与使用. 实验要求: 按下列要 ...

  2. java抽象和接口的理解_Java接口实现与抽象类的区别理解 | 彬菌

    版权声明:转载原创文章请以超链接形式请注明原文章出处,尊重作者,尊重原创! 恰饭广告 接口:接口是抽象方法的集合.接口通常以interface来声明. 接口注意事项: 1.严格来说,接口是用来实现(i ...

  3. java什么是网络接口_java接口和类的区别是什么?它们都有哪些作用呢?

    由于新兴技术的发展,java不断地被更多人应用,而其中java接口和java类的区别主要是哪些,在哪些方面作用显著?这是困扰许多人的问题,那么,让我们继续看一下这两者的区别和作用吧? 在java中,对 ...

  4. java接口编程题_Java接口练习题

    1.说出下面程序的执行结果: interface InterfaceA { String S = "good "; void f(); } abstract class Class ...

  5. java接口的关键字_Java 接口 interface关键字

    1.概念:一种特殊的类,有全局常量和公共方法组成 定义接口用interface关键字 2.语法: //中括号"[ ]"的含义:你可继承父接口,也可不继承,是可选的 [修饰符] (a ...

  6. java抽象类接口举例代码_Java接口和抽象类实例分析

    本文实例讲述了Java的接口和抽象类.分享给大家供大家参考.具体分析如下: 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相 ...

  7. java接口和抽象类_Java接口和抽象类的区别

    类是对象的模板,抽象类和接口可以看做是具体的类的模板. 由于从某种角度讲,接口是一种特殊的抽象类,它们的渊源颇深,有很大的相似之处,所以在选择使用谁的问题上很容易迷糊.我们首先分析它们具有的相同点. ...

  8. Java私有方法解释_java接口中 定义 private 私有方法

    在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法.只允许我们定义public访问权限的方法.抽象方法或静态方法.但是从Java 9 开 ...

  9. java nio的演进_Java接口的防御性API演进

    java nio的演进 API的发展绝对是不平凡的. 只有少数几个需要处理的事情. 我们大多数人每天都在使用内部专有API. 现代IDE附带了很棒的工具,可以分解,重命名,上拉,下推,间接,委托,推断 ...

最新文章

  1. 《Adobe Illustrator CC 2014中文版经典教程(彩色版)》—第2课2.6节隐藏和锁定对象...
  2. 清华大学《大数据系统基础》项目征集说明(2021年秋季)
  3. Django之路——6 Django的模型层(一)
  4. Java中的String,StringBuilder,StringBuffer三者的区别
  5. LINUX内核分析第二周学习总结——操作系统是如何工作的
  6. MogoDb的使用及配置
  7. 5下载的demo在哪_归类专业能力水平评价练习盘!快来下载呀
  8. Spark SQL(九)之基于用户的推荐公式
  9. D5SJ醴陵 2013最新版
  10. php file_get_contents()请求某个链接
  11. 软件测试模型-V模型
  12. 消息中间件→产生原因、JMS与AMQP、主流消息中间件、基本概念、ActiveMQ、集群、实际场景问题解决方案、集成rabbitMQ与kafka
  13. 如何确定一家培训机构值得信赖
  14. 搭建自己的框架WedeNet(一)
  15. 【数据分析】数据分析方法(一):5W2H 分析方法
  16. 关于javascript中避免使用eval的理解
  17. [ZGC升级记录](to-space exhausted/Evacuation Failure)
  18. 为您详解在ChemDraw中进行3D建模的方法
  19. 《概率论与数理统计》学习笔记
  20. Mac如何创建自签名证书?Mac创建自签名证书图文教程

热门文章

  1. 传输协议之ICMP详解
  2. 扩展FMX下TGRID的TPopupColumn
  3. 公众号运营小编自制gif动图的方法
  4. 手把手教你在VMware16.0上安装ubuntu20.04(虚拟机安装Ubuntu系统))
  5. 手机屏幕 高宽有哪些_手机新屏幕比18:9高宽到底好在哪里
  6. AD16 Mooretronics 矢量标识符号 + 丝印反白
  7. A4和B5纸张大小是按什么标准划分的?
  8. 深度学习笔记其六:现代卷积神经网络和PYTORCH
  9. Altium Designer---------------AD15如何走差分线(最全教程)
  10. vim复制一行不复制换行_如何在vim中换行和不换行