接口默认方法冲突的问题

接口默认方法的冲突问题

1、当一个类实现了两个接口,这两个接口有方法签名相同的默认方法。
方法签名:修饰符 返回值类型 方法名(形参列表)

如何解决?
(1)保留其中一个接口的默认实现
接口名.super.默认方法(…);
(2)完全重写

2、当一个类继承父类又实现接口,这个类中有与接口的默认方法签名相同方法时
(1)默认保留的是父类的
(2)可以选择保留接口的默认实现
接口名.super.默认方法(…)
(3)完全重写

public class TestDefaultMethod {
	public static void main(String[] args) {
		Person p = new Person();
		p.run();
		
		Sub s = new Sub();
		s.run();
		
		Daughter d = new Daughter();
		d.run();
	}
}
interface Runnable{
	public default void run() {
		System.out.println("Runnable的默认方法");
	}
}

interface Walkable{
	public default void run() {
		System.out.println("Workable的默认方法");
	}
}

class Person implements Runnable,Walkable{

	//方法一:保留Runnable接口中的默认方法
	@Override
	public void run() {
		// TODO Auto-generated method stub
		Runnable.super.run();
	}

	
/*
	//方法二:保留Walkable接口中的默认方法
	@Override
	public void run() {
		// TODO Auto-generated method stub
		Walkable.super.run();
	}
*/

/*
	//方法三:重写方法
	@Override
	public void run() {
		System.out.println("找第三个");
	}
*/
	
/*	
	//逻辑上不通,但是语法上可以
	@Override
	public void run() {
		// TODO Auto-generated method stub
		Runnable.super.run();
		Walkable.super.run();
	}
*/
}

class Father{
	public void run() {
		System.out.println("Father类中的run()");
	}
}
class Sub extends Father implements Runnable{
	//默认保留的是父类的
}

class Daughter extends Father implements Runnable{
	
	/*//手动选择保留接口的默认实现
	public void run() {
		Runnable.super.run();
	}*/
	
	//谁也不听自己写
	public void run() {
		System.out.println("自己重写");
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值