java电脑类的接口_java 一个类实现两个接口的案例
直接用英文逗号分隔就可以了,比如:?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
inerface IHello {
String sayHello(String name);
}
interface IHi {
String sayHi(String name);
}
class ServiceImplimplements IHello, IHi {// 实现三个四个。。。n个接口都是使用逗号分隔
public String sayHello(String name) {
return "Hello, " + name;
}
public String sayHi(String name) {
return "Hi, " + name;
}
}
inerface IHello {
String sayHello(String name);
}
interface IHi {
String sayHi(String name);
}
class ServiceImpl implements IHello, IHi {// 实现三个四个。。。n个接口都是使用逗号分隔
public String sayHello(String name) {
return "Hello, " + name;
}
public String sayHi(String name) {
return "Hi, " + name;
}
}
补充知识:Java 一个类实现的多个接口,有相同签名的default方法会怎么办?
看代码吧~?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public interface A {
default void hello() {
System.out.println("Hello from A");
}
}
public interface Bextends A {
default void hello() {
System.out.println("Hello from B");
}
}
public class Cimplements B, A {
public static void main(String... args) {
new C().hello();
}
}
public interface A {
default void hello() {
System.out.println("Hello from A");
}
}
public interface B extends A {
default void hello() {
System.out.println("Hello from B");
}
}
public class C implements B, A {
public static void main(String... args) {
new C().hello();
}
}
这段代码,会打印什么呢?
有三条规则
类永远赢。类声明的方法,或者超类声明的方法,比default方法的优先级高
否则,子接口赢
否则,如果集成自多个接口,必须明确选择某接口的方法
上面代码的UML图如下
所以,上面的代码,输出是
Hello from B
如果这样呢??
1
2
3
4
5
6
7
8
public class Dimplements A{
}
public class Cextends Dimplements B, A {
public static void main(String... args) {
new C().hello();
}
}
public class D implements A{
}
public class C extends D implements B, A {
public static void main(String... args) {
new C().hello();
}
}
UML图是这样的
规则1说,类声明的方法优先级高,但是,D没有覆盖hello方法,它只是实现了接口A。所以,它的default方法来自接口A。规则2说,如果类和超类没有方法,就是子接口赢。所以,程序打印的还是“Hello from B”。
所以,如果这样修改代码?
1
2
3
4
5
6
7
8
9
10
public class Dimplements A{
void hello(){
System.out.println("Hello from D");
}
}
public class Cextends Dimplements B, A {
public static void main(String... args) {
new C().hello();
}
}
public class D implements A{
void hello(){
System.out.println("Hello from D");
}
}
public class C extends D implements B, A {
public static void main(String... args) {
new C().hello();
}
}
程序的输出就是“Hello from D”。
如果D这样写?
1
2
3
public abstract class Dimplements A {
public abstract void hello();
}
public abstract class D implements A {
public abstract void hello();
}
C就只能实现自己的抽象方法hello了。
如果是这样的代码呢?
1
2
3
4
5
6
7
8
9
10
11
12
13
public interface A {
default void hello() {
System.out.println("Hello from A");
}
}
public interface B {
default void hello() {
System.out.println("Hello from B");
}
}
public class Cimplements B, A {
}
public interface A {
default void hello() {
System.out.println("Hello from A");
}
}
public interface B {
default void hello() {
System.out.println("Hello from B");
}
}
public class C implements B, A {
}
UML图如下
会生成这样的编译器错误
"Error: class C inherits unrelated defaults for hello() from types B and A."
怎么修改代码呢?只能明确覆盖某接口的方法?
1
2
3
4
5
public class Cimplements B, A {
void hello(){
B.super.hello();
}
}
public class C implements B, A {
void hello(){
B.super.hello();
}
}
如果代码是这样的,又会怎样呢??
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public interface A{
default void hello(){
System.out.println("Hello from A");
}
}
public interface Bextends A {
}
public interface Cextends A {
}
public class Dimplements B, C {
public static void main(String... args) {
new D().hello();
}
}
public interface A{
default void hello(){
System.out.println("Hello from A");
}
}
public interface B extends A {
}
public interface C extends A {
}
public class D implements B, C {
public static void main(String... args) {
new D().hello();
}
}
UML图是这样的
很明显,还是不能编译。
以上这篇java 一个类实现两个接口的案例就是小编分享给大家的全部内容了,
java电脑类的接口_java 一个类实现两个接口的案例相关推荐
- Java开发规范,不要新建一个类就实现Serializable接口
个人网站:http://xiaocaoshare.com/ 作为一名java开发者,细节决定技术的高度和深度 一个java类什么时候需要实现Serializable接口 1.什么是Serializab ...
- java类里面再定一个类_java类的里面可以再定义一个类吗 java里可不可以在一个...
java类里面还可以定义一个类,即内部类. java内部类分为: 成员内部类.静态嵌套类.方法内部类.匿名内部类 . 内部类的共性 (1).内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的. ...
- 一个java应用程序必须且只有一个类含有什么方法_JAVA简答题!!!
Java简答题 1.简述java语言的特点? 1.2 Java语言是目前使用最为广泛的网络编程语言之一(1分) 具有面向对象(1分) 与平台无关性(1分) 多线程性(1分) 动态性等特点(1分) 2. ...
- java怎么调用另一个类的方法_在一个类中访问另一个类的方法
在一个类中访问另一个类的方法 由于Java应用程序是由若干个类构成的,因此经常需要在一个类中访问另一个类中的成员和方法,请问应该如何在一个类中访问另一个类的方法?下面是由百分网小编为大家整理的在一个类 ...
- java中的复合数据类型是什么_【填空题】类是Java中的一种重要的复合数据类型,是组成Java程序的基本要素。一个类的实现包括两部分:____和_____....
[填空题]类是Java中的一种重要的复合数据类型,是组成Java程序的基本要素.一个类的实现包括两部分:____和_____. 更多相关问题 [名词解释] 观叶树木 [单选] 开花时有浓郁香气的树种是 ...
- java有且只有一个什么_1. 一个Java应用程序必须且只有一个类含有 main_____ 方法....
1.一个Java应用程序必须且只有一个类含有main_____方法.2.构造方法是一种特殊方法,它的名字必须与它所在的类的名字完全相同,并不返回任何数据类型.3.子类自然地继承了其父类中不是... 1 ...
- java compareable接口_Java对象比较-Comparable和Comparator接口使用
最近在学习贪心算法和动态规划的过程中,里面有一段自然排序的操作,顺便简单了解一下Java中对象比较后排序要使用的两个接口:Comparable和Comparator.如果是数字,直接比较就行,但是如果 ...
- 不能将brassplus类型的值分配到brass类的实体_Java 基础 - 类与对象
类.对象和引用的关系 类和对象的关系 类是对象的模版,对象是类的一个实例,一个类可以有很多对象 一个Java程序中类名相同的类只能有一个,也就是类型不会重名 一个对象只能根据一个类来创建 引用和类以及 ...
- php引入类的位置,php如何在一个类中引入另外一个类
有时候需要在一个类中调用另外一个类里面的方法,然后另外一个类又需要调用当前类的方法,怎么办呢?下面是具体的介绍.希望对大家有用,更多内容请关注应届毕业生网! 可以直接引入类对象的方式调用另外一个类的方 ...
最新文章
- Android 底部导航栏添加消息数目提示
- java四种线程池类型以及可选择的阻塞队列
- python自学行_怎么自学python?
- ThinkPHP3.2 常量参考
- vb设置excel 字体 加粗 微软雅黑_Python操作Excel的Xlwings教程(六)
- 插件怎么用_PPT插件怎么用?用好了10s就能给出一个动画特效,不好看不要钱
- Android.mk 语法详解
- js 获取url参数_小总结 - JS获取页面URL信息
- 圆我一个游戏梦,XNA版超级玛丽
- 厦门大学计算机调剂要求,厦门大学调剂公告
- libdmtx结合OpenCV识别DataMatrix二维码
- Problem F - Football Free Kick(数组1e9的插入和删除)
- DirectX修复工具使用
- C++快速入门学习笔记(一)
- Vue3初识 学习记录(一)
- Mysql给一个大表加一列_MySQL 大表添加一列的实现
- LikeLib区块链底层公链技术应用
- 原生JS简单的无缝自动轮播
- 使用插件将网页翻译成中文
- 华硕ddns注册ip地址不正确_华硕路由器 ddns注册成功,但是连接不上,怎么修改成别的ddns...
热门文章
- java 协议处理器_协议处理器urlstreamhandler及contenthandler
- java tostring方法_Java虚拟机如执行方法调用的(二)?
- 一致性哈希解决的问题
- C++引用与指针的不同
- 应用程序利用ADO对象访问数据库
- Oracle 软件的安装
- 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 17丨文章浏览 II【难度中等】​
- 安卓逆向_5 --- Android 学习
- 小甲鱼 OllyDbg 教程系列 (十三) : 把代码和变量注入程序 以及 硬件断点
- amd cpu不能在cmd环境下运行java代码_如何在Windows10中配置java的JDK环境