注意

  • 接口中不允许有静态代码块和构造方法(接口不能直接new)。

接口的多实现

在继承体系中,一个类只能继承一个父类,而对于接口而言,一个类是可以实现多个接口的。

这种叫做接口的多实现。一个类能继承一个父类,且同时实现多个接口。

格式:

【】 :表示可选操作。

class 类名 【extends 父类名】 implements 接口名1,接口名2... {// 重写接口中的抽象方法【可选】// 重写接口中的默认方法【不重名时可选】
}

抽象方法重写

接口中,有多个抽象方法时,实现类必须重写所有抽象方法。如果抽象方法有重名,只需重写一次

爸爸妈妈都让去上学,说一次就行了

定义多个接口:

MyInterfaceA

public interface MyInterfaceA {/*// error 接口不能有静态代码块static { }// error 接口不能有构造方法(接口不能直接new)public MyInterface() {}
*/public abstract void methodA();public abstract void methodSchool();}

MyInterfaceB

public interface MyInterfaceB {public abstract void methodB();public abstract void methodSchool();  }
}

定义实现类:

package cn.luis.demo2.I2;public class MyInterfaceImpl /*extends Object*/ implements MyInterfaceA, MyInterfaceB {@Overridepublic void methodA() {System.out.println("AAA");}@Overridepublic void methodB() {System.out.println("BBB");}@Overridepublic void methodSchool() {System.out.println("上学去!");}
}

默认方法重写

接口中,有多个默认方法时,实现类都可继承使用。如果默认方法有重名的,必须进行覆盖重写一次

例如:游戏和女朋友选哪一个

定义多个接口:

MyInterfaceA

public interface MyInterfaceA {public default void methodDefault() {System.out.println("妈妈说:先做语文作业");}
}

MyInterfaceB

public interface MyInterfaceB {public default void methodDefault() {System.out.println("爸爸说:先做数学作业");}
}

定义实现类:

public class MyInterfaceImpl /*extends Object*/ implements MyInterfaceA, MyInterfaceB {@Overridepublic void methodDefault() {  // 实现类覆盖重写默认方法不带default【重要】//System.out.println("打游戏!");}
}

静态方法

接口中,存在同名的静态方法并不会冲突,因为只能通过各自接口名访问静态方法。

继承优先于接口实现

若一个类直接父类(亲爹)当中的方法,和接口中的默认方法重名,优先使用父类中的方法。

定义接口:

public interface MyInterface {public default void method() {System.out.println("打LOL");}
}

定义父类:

public class Fu {public void method() {System.out.println("玩CSGO");}
}

定义子类:

// 6.继承优先于接口实现
public class Zi extends Fu implements MyInterface {// 未重写method方法
}

定义测试类:

public class Demo01Interface {public static void main(String[] args) {Zi zi = new Zi();zi.method();  // 父类方法}
}

结果:

玩CSGO

总结

接口是没有静态代码块或者构造方法的。

没有构造方法意味着无法创建对象

一个类的直接父类是唯一的,但是一个类可以同时实现多个接口

public class MyInterfaceImpl implements MyInterfaceA, MyInterfaceB {// 覆盖重写所有抽象方法
}

如果实现类所实现的多个接口当中,存在重复的抽象方法,那么只需要重写一次即可

爸爸妈妈都让去上学,一次就行了

若实现类未覆盖重写所有接口当中所有的抽象方法,那么实现类必须是一个抽象类

若实现类所实现的多个接口中,存在重复的默认方法,那么实现类一定要对冲突的默认方法进行覆盖重写。

游戏和女朋友选哪一个

如果一个类直接父类(亲爹)当中的方法,和接口中的默认方法产生了冲突,优先使用父类中的方法。

继承优先于接口实现

. 接口中,无法定义成员变量,但是可以定义常量,其值不可以改变,

默认使用public static final修饰。

实现类覆盖重写接口的默认方法不带default关键字 【重要】

接口的多继承

一个接口能继承另一个或多个接口,这和类之间的继承比较相似。接口的继承使用extends关键字,子接口能继承父接口的方法。

如果父接口中的默认方法重名,那么子接口需要重写一次。

定义父接口

MyInterfaceA

package cn.luis.demo3;public interface MyInterfaceA {public abstract void methodA();public abstract void methodCommon();public default void methodDefault() {System.out.println("先吃鸡蛋");}
}

MyInterfaceB

package cn.luis.demo3;public interface MyInterfaceB {public abstract void methodB();public abstract void methodCommon();public default void methodDefault() {System.out.println("先喝粥");}
}

定义子接口

这个子接口当中有几个方法? 答:4个

  • methodA()来源于接口A
  • methodB()来源于接口B
  • methodCommon()同时来源于接口A、B
  • methodZi()来源于自己
package cn.luis.demo3;/**/
public interface MyInterfaceZi extends MyInterfaceA, MyInterfaceB {public abstract void methodZi();// 两个父接口默认方法冲突@Overridepublic default void methodDefault() {  // 子接口必须进行默认方法的重写【default】System.out.println("methodDefault:听我的,先吃油条");}
}

接口的多实现和多继承相关推荐

  1. Java程序设计当中包的使用_【学习笔记】 唐大仕—Java程序设计 第4讲 类、包和接口之4.2 类的继承...

    [学习笔记] 唐大仕-Java程序设计 第4讲 类.包和接口之4.2 类的继承 super的使用 1.使用super访问父类的域和方法 注意:正是由于继承,使用this可以访问父类的域和方法.但是有时 ...

  2. yii2.0框架中自定义接口,实现类的多继承

    一.前言 最近有个需求,比如有A,B,C,D四个文件,原来的逻辑是,A继承B,C继承D.后来由于A和C的逻辑太像,既然如此的话,为什么不把A,C写一起呢,第一是方便维护,第二也是减少无用的代码,说干就 ...

  3. 接口是否可继承接口? 抽像类是否可实现(implements)接口? 抽像类是否可继承实体类(concrete class)?...

    接口是否可继承接口? 抽像类是否可实现(implements)接口? 抽像类是否可继承实体类(concrete class)? 1. 接口可以继承接口. 2. 抽像类可以实现(implements)接 ...

  4. 十一、接口(接口的概念,实现,继承,实现)、抽象类与抽象方法(抽象类,抽象方法概念,使用)...

    接口 接口是一种用来定义程序的协议,它描述可属于任何类和结构的一组相关行为. 接口可由方法.属性.事件和索引器这四种成员类型的任何组合构成,但不能包含字段. 接口通过类继承来实现,一个类虽然只能继承一 ...

  5. java 继承 接口 练习,java:面向对象-抽象类、继承、接口结合练习

    public class Demo5_Animal { public static void main(String[]args){ Cat_Test c=new Cat_Test("加菲猫 ...

  6. Java中实现接口与继承的区别

    ** Java中实现接口与继承的区别 ** 首先,先来了解一下什么是接口和继承.接口一般是使用interface来定义的.接口定义同类的定义类似,分为接口的声明和接口体,其中接口体由常量定义和方法定义 ...

  7. 【C# 复习总结】类、继承和接口

    1 类 定义新的数据类型以及这些新的数据类型进行相互操作的方法 定义方式: class Cat{}class Cat:object{} C#中所有的类都是默认由object类派生来的,显示指定或者省略 ...

  8. java-类(class)继承,重写,重构,抽象,接口等

    类的继承格式 在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下: class 父类 { }class 子类 extends 父类 { } 为什么需要继承 ...

  9. java 抽象类继承抽象类_Java之继承、抽象类、接口篇

    一.继承(extends) 什么是继承? 继承是对现实生活中的"分类"概念的一种模拟. 狮子拥有动物的一切基本特性,但同时又拥有自己的独特的特性,这就是"继承" ...

最新文章

  1. Linux下MySql出现#1036 – Table ‘ ‘ is read only 错误解决方法
  2. pycharm设置控制台的解释器_PyCharm 中文教程 01:运行 Python 的四种方式
  3. xml凭证模板的一般制作
  4. myeclipse2014如何创建user library
  5. [蓝桥杯2016初赛]搭积木-枚举,next_permutation
  6. (十)nodejs循序渐进-高性能游戏服务器框架pomelo之介绍和安装篇
  7. 现代控制理论——非线性系统的lyapunov
  8. PdfSharp库剪裁Pdf页面边缘空白部分
  9. 剖析锂电池的工作原理
  10. Hexo搭建个人博客(十五)| 酒香也怕巷子深,让百度收录你的站点
  11. linux 空白进程,Linux空白行:行号显示、空白行数统计、删除空白行
  12. 淘宝全自动下单——解放双手
  13. 艺术摄影--光线的运用(2学时)--SDUST
  14. rtl8811au黑苹果10.15_黑苹果10.15Catalina硬件选择+完美配置指南【接入智能家居】...
  15. 6 种老而不死的编程语言!
  16. pytorch torchvision.ops.roi_align 示例
  17. 等精度测频原理--频率计
  18. iOS 制作推送证书的流程 超详细!!!!!
  19. 智能AI电话机器人系统
  20. word中插入图片只显示底边,其他看不到,插入公式显示不全

热门文章

  1. 简单处理excel 转成 json
  2. Golang安装第三方库
  3. vimperator
  4. python——pickle模块的使用
  5. 利用yolov5检测物体的3维坐标,并以ROS输出
  6. Modbus功能码与数据类型
  7. 利用Vector CANOE/CANalyzer的系统变量System Variables观察CAN信号之间的关系
  8. cc视频直播的SDK集成
  9. win8u盘启动linux系统,在Mac系统下制作Windows启动U盘(失败案例)
  10. java中字符串转数组,数组转字符串,集合转字符串