接口【四】继承父类并实现多个接口
接口【四】继承父类并实现多个接口
- 继承父类接口
- 接口间的多继承
继承父类接口
使用接口时需要注意:
1.接口没有静态代码块或者构造方法的。
先创建一个接口
public interface MyInterface{//错误写法1,接口不能有静态代码块//static{}//错误写法2,接口不能有构造方法//public MyInterface(){}
}
2.一个类的直接父类是唯一的(有且只有一个),但一个类可以同时实现多个接口。基本格式:public class MyInterfaceImpl implements MyInterfaceA, MyInterfaceB{//覆盖重写所有抽象方法}
创建编写一个MyInterfaceA.java接口文件
public interface MyInterfaceA{public abstract void methodA();
}
再创建编写一个MyInterfaceB.java接口文件
public interface MyInterfaceB{public abstract void methodB();
}
创建一个实现类MyInterfaceImpl.java
public class MyInterfaceImpl /*extend Object Java中任何一个类都是Object直接或间接子类,可以省略该两个关键字*/ implements MyInterfaceA, MyInterfaceB {//快捷方式Alt键+回车,选择Implement methods,再根据需求选择接口的抽象方法来覆盖重写@Overridepublic void methodA(){System.out.println("覆盖重写了A方法")}@Overridepublic void methodB(){System.out.println("覆盖重写了B方法")}
}
3.如果实现类所实现的多个接口当中,存在重复的抽象方法,那么只需要覆盖重写一次。
1)MyInterfaceA.java接口文件当中编写:
public interface MyInterfaceA{public abstract void methodA();public abstract void methodAbs();//这是抽象方法
}
2)MyInterfaceB.java接口文件当中编写:
public interface MyInterfaceB{public abstract void methodB();public abstract void methodAbs();//这是抽象方法
}
3)MyInterfaceImpl实现类文件当中编写:也就是Alt键+回车选择methodAbs():void
public class MyInterfaceImpl /*extend Object Java中任何一个类都是Object直接或间接子类,可以省略该两个关键字*/ implements MyInterfaceA, MyInterfaceB {//快捷方式Alt键+回车,选择Implement methods,再根据需求选择接口的抽象方法来覆盖重写@Overridepublic void methodA(){System.out.println("覆盖重写了A方法")}@Overridepublic void methodB(){System.out.println("覆盖重写了B方法")}@Overridepublic void methodAbs(){System.out.println("覆盖重写了AB接口都有的抽象方法")}
}
4.如果实现类没有覆盖重写所有接口当中的所有抽象方法,那么实现类必须是一个抽象类。
先创建一个实现类文件
public abstract class MyInterfaceImplimplements MyInterfaceA, MyInterfaceB {@overridepublic void methodA(){}@overridepublic void methodAbs(){}
}
5.如果实现类所实现的多个接口当中,存在重复默认方法,那么实现类一定要对冲突的默认方法进行覆盖重写。
在MyInterfaceA.java接口文件编写:
public interface MyInterfaceA{public abstract void methodA();public abstract void methodAbs();public default void methodDefault(){System.out.println("默认方法AAA")}
}
在MyInterfaceB.java接口文件编写:
public interface MyInterfaceA{public abstract void methodA();public abstract void methodAbs();public default void methodDefault(){System.out.println("默认方法BBB")}
}
在MyInterfaceImpl.java实现类文件编写:
public class MyInterfaceImpl implements MyInterfaceA, MyInterfaceB {//快捷方式Alt键+回车,选择Implement methods,再根据需求选择接口的抽象方法来覆盖重写@Overridepublic void methodA(){System.out.println("覆盖重写了A方法")}@Overridepublic void methodB(){System.out.println("覆盖重写了B方法")}@Overridepublic void methodAbs(){System.out.println("覆盖重写了AB接口都有的抽象方法")}@overridepublic void methodDefault(){System.out.println("对多个接口当中冲突的默认方法进行了覆盖重写")}
}
在MyInterfaceAbstract.java实现类文件编写:
public abstract class MyInterfaceImplimplements MyInterfaceA, MyInterfaceB {@overridepublic void methodA(){}@overridepublic void methodAbs(){}//快捷方式Alt键+回车选择Implement methods,再分析哪个默认接口方法冲突就选择哪个@Overridepublic void methodDefault(){}
}
6.一个类如果直接实现父类中的方法,和接口中的默认方法产生冲突,优先使用父类中的方法。
先new创建编写一个父类
public class Fu{public void method(){System.out.println("父类方法");}
}
创建一个子类
public class Zi extends Fu implements MyInterface{}
接着创建一个接口
public interface MyInterface {public default void method(){System.out.println("接口的默认方法");}
}
在Java中继承由于接口实现
创建尝试使用
public class Demo01Interface{public static void main(String[] args){Zi zi = new Zi();zi.method();}
}
最后运行实现
接口间的多继承
1.类与类之间是单继承的,直接父类只有一个。
2.类与接口之间多实现的,一个类可以实现多个接口。
3.接口与接口之间是多继承的。
public interface MyInterfaceA {public abstract void methodA();public abstract void methodCommon();
}
同理再创建一个MyInterfaceB.java
public interface MyInterfaceB {public abstract void methodB();public abstract void methodCommon();
}
public interface MyInterface extends MyInterfaceA, MyInterfaceB{public abstract void method();
}//这个子接口有4个方法
//methodA 来源于接口A
//methodB 来源于接口B
//methodCommon 同时来源于接口A和B
//method 来源自己
创建一个实现类验证有4个方法
public class MyInterfaceImpl implements MyInterface {//Alt键+回车键选择“Implement methods”,接着全选内容@Overridepublic void method(){}public void methodA(){}public void methodB(){}public void methodCommon(){}
}
多个父接口中的抽象方法之间有重复,没有关系,因为抽象方法没有方法
但,如果父类接口默认方法之间有重复,那么子接口必须进行默认方法的覆盖重写,而且需要带有default
关键字,它的解决方案如下:
比如MyInterfaceA.java的编码为
public interface MyInterfaceA {public abstract void methodA();public abstract void methodCommon();public default void methodDefault(){System.out.println(){"AAA"}}
}
同样MyInterfaceB.java的编码为
public interface MyInterfaceB {public abstract void methodB();public abstract void methodCommon();public default void methodDefault(){System.out.println(){"BBB"}}
}
这里两个父类接口的默认方法被子接口继承,则子接口发生错误,子接口需要在MyInterfaceA.java和MyInterfaceB.java两个接口之间的默认方法选择
public interface MyInterface extends MyInterfaceA, MyInterfaceB{public abstract void method();//Alt键+回车键选择“Implement methods”,接着冲突的默认方法“methodDefault():void”@Overridedefault void methodDefault(){}//public default void methodDefault(){} //新手写法
}
接口【四】继承父类并实现多个接口相关推荐
- 【零基础学Java】—继承父类并实现多个接口(二十五)
[零基础学Java]-继承父类并实现多个接口(二十五) 一.使用接口的注意事项 1️⃣接口是没有静态代码块或者构造方法的 2️⃣一个类的直接父类是唯一的,但是一个类可以同时实现多个接口 3️⃣如果实现 ...
- java类注解是否可以通过实现接口或继承父类的方式获得
接口类 @Service public interface UserService {public void get(); } 实现类 public class UserServiceImpl imp ...
- 接口抽象类继承父类和子类
1.接口是什么? 接口可以理解为一个特殊的抽象类,是由全局常量和公共抽象方法组成的. 所以,如果,一个抽象类的方法都是抽象的,那么就可以通过接口的形式来表示. class 用于定义类 interfac ...
- 24继承父类并实现多个接口
Demo01Interface package InterfaceandExtend;/** 1.接口不能有静态代码块和构造方法* 2.一个类的直接父类是唯一的,但是一个类可以同事实现多个接口.* p ...
- java 中普通类继承,抽象类继承,接口类继承,子类一定要重写父类中的方法吗
一.简单总结,需要重写的有 普通类继承抽象类,重写所有抽象类方法:(不包括普通方法) 普通类继承接口,重写所有接口方法.(不包括default关键字修饰的方法) 详解见下: 普通类继承,并非一定要重写 ...
- C# - 接口,继承
接口 接口是把公共实例(非静态)方法和属性组合起来,以封装特定功能的一个集合.不能像实例化一个类那样实例化接口.接口不能包含实现其成员的任何代码,而只能定义成员本身.实现过程必须在实现接口的类中完成. ...
- 【笔记】《Java编程思想(第四版)》第9章-接口
第9章 接口 接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 这种机制在编程语言中并不通用.例如C++对这些概念只有间接的支持.在Java 中存在语言关键字这个事实表明人们认为这些思 ...
- 继承父类 , 实现接口 时, 方法的权限
在说这个问题之前,先简单介绍一下接口中的方法的访问权限 接口中所有的方法,默认都是 public abstract 所有的属性,默认都是public static final 接口中定义不了,访问权限 ...
- 实验四 类和对象;类的继承和派生;多态性; 接口;构造器应用
实验四 类和对象:类的继承和派生:多态性: 接口:构造器应用 一.实验目的 1. 掌握类与对象的关系: 2. 掌握类的定义: 3. 掌握对象的声明及使用: 4. 掌握构造方法的概念及调用时机: 5. ...
最新文章
- python二叉树深度 判断平衡树
- Delphi中的Type
- jq使用教程01_最贴心教程,安装JQData全靠这篇指南
- 【离散期末复习】:集合论
- Stuck Stack成过去时,OpenStack升级还可以这样玩?!
- 写给过得很辛苦很迷茫的你~一定要看啊
- Oracle EBS SLA Custom Sources(自定义来源)
- flash写保护原理_stm32对flash的读写保护与解除
- 行业报告归档 2017.3.21
- 解决windows 10桌面文件图标上出现两个蓝色箭头
- python怎么改成白底_教你用OpenCV 和 Python给证件照换底色(蓝底 -红底-白底)...
- 初识C语言:小白学习C语言的第一周记录
- 笨方法学python 41:来自 Percal 25 号行星的哥顿人 (Gothons)
- QT Create OCI方式连接达梦数据库
- 神经网络与深度学习笔记汇总二
- freeswitch使用自签证书,配置WSS
- ADAU1452DSP+E2PROM自启动运行
- 【防火墙篇】02. 宽带上网设置 ❀ 网康防火墙
- 沃可趣 | 企业内部互动社区,职场也能成为秀场
- securecrt英文乱码怎么办_本科毕业论文查重率不合格怎么办?如何使用知网正版查重本科毕业论文?...