接口的多实现和多继承
注意
- 接口中不允许有静态代码块和构造方法(接口不能直接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()
来源于接口AmethodB()
来源于接口BmethodCommon()
同时来源于接口A、BmethodZi()
来源于自己
package cn.luis.demo3;/**/
public interface MyInterfaceZi extends MyInterfaceA, MyInterfaceB {public abstract void methodZi();// 两个父接口默认方法冲突@Overridepublic default void methodDefault() { // 子接口必须进行默认方法的重写【default】System.out.println("methodDefault:听我的,先吃油条");}
}
接口的多实现和多继承相关推荐
- Java程序设计当中包的使用_【学习笔记】 唐大仕—Java程序设计 第4讲 类、包和接口之4.2 类的继承...
[学习笔记] 唐大仕-Java程序设计 第4讲 类.包和接口之4.2 类的继承 super的使用 1.使用super访问父类的域和方法 注意:正是由于继承,使用this可以访问父类的域和方法.但是有时 ...
- yii2.0框架中自定义接口,实现类的多继承
一.前言 最近有个需求,比如有A,B,C,D四个文件,原来的逻辑是,A继承B,C继承D.后来由于A和C的逻辑太像,既然如此的话,为什么不把A,C写一起呢,第一是方便维护,第二也是减少无用的代码,说干就 ...
- 接口是否可继承接口? 抽像类是否可实现(implements)接口? 抽像类是否可继承实体类(concrete class)?...
接口是否可继承接口? 抽像类是否可实现(implements)接口? 抽像类是否可继承实体类(concrete class)? 1. 接口可以继承接口. 2. 抽像类可以实现(implements)接 ...
- 十一、接口(接口的概念,实现,继承,实现)、抽象类与抽象方法(抽象类,抽象方法概念,使用)...
接口 接口是一种用来定义程序的协议,它描述可属于任何类和结构的一组相关行为. 接口可由方法.属性.事件和索引器这四种成员类型的任何组合构成,但不能包含字段. 接口通过类继承来实现,一个类虽然只能继承一 ...
- java 继承 接口 练习,java:面向对象-抽象类、继承、接口结合练习
public class Demo5_Animal { public static void main(String[]args){ Cat_Test c=new Cat_Test("加菲猫 ...
- Java中实现接口与继承的区别
** Java中实现接口与继承的区别 ** 首先,先来了解一下什么是接口和继承.接口一般是使用interface来定义的.接口定义同类的定义类似,分为接口的声明和接口体,其中接口体由常量定义和方法定义 ...
- 【C# 复习总结】类、继承和接口
1 类 定义新的数据类型以及这些新的数据类型进行相互操作的方法 定义方式: class Cat{}class Cat:object{} C#中所有的类都是默认由object类派生来的,显示指定或者省略 ...
- java-类(class)继承,重写,重构,抽象,接口等
类的继承格式 在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下: class 父类 { }class 子类 extends 父类 { } 为什么需要继承 ...
- java 抽象类继承抽象类_Java之继承、抽象类、接口篇
一.继承(extends) 什么是继承? 继承是对现实生活中的"分类"概念的一种模拟. 狮子拥有动物的一切基本特性,但同时又拥有自己的独特的特性,这就是"继承" ...
最新文章
- Linux下MySql出现#1036 – Table ‘ ‘ is read only 错误解决方法
- pycharm设置控制台的解释器_PyCharm 中文教程 01:运行 Python 的四种方式
- xml凭证模板的一般制作
- myeclipse2014如何创建user library
- [蓝桥杯2016初赛]搭积木-枚举,next_permutation
- (十)nodejs循序渐进-高性能游戏服务器框架pomelo之介绍和安装篇
- 现代控制理论——非线性系统的lyapunov
- PdfSharp库剪裁Pdf页面边缘空白部分
- 剖析锂电池的工作原理
- Hexo搭建个人博客(十五)| 酒香也怕巷子深,让百度收录你的站点
- linux 空白进程,Linux空白行:行号显示、空白行数统计、删除空白行
- 淘宝全自动下单——解放双手
- 艺术摄影--光线的运用(2学时)--SDUST
- rtl8811au黑苹果10.15_黑苹果10.15Catalina硬件选择+完美配置指南【接入智能家居】...
- 6 种老而不死的编程语言!
- pytorch torchvision.ops.roi_align 示例
- 等精度测频原理--频率计
- iOS 制作推送证书的流程 超详细!!!!!
- 智能AI电话机器人系统
- word中插入图片只显示底边,其他看不到,插入公式显示不全