接口中的默认方法和静态方法(五)

接口中的默认方法
接口默认方法的“超类优先” 原则


java8在接口中引入了默认方法,通过在方法前加上default关键字就可以在接口中写方法的默认实现,有点类似于C++中的多继承,但是当多个接口或父类中有相同签名的方法时,会引发一些问题,经过实验得出如下结论:

规则如下:

1.超类优先,如果超类提供了一个具体的方法,同名而且有相同的参数类型的默认方法会被忽略。

2.接口冲突。如果一个超接口提供了一个默认方法,另一个接口提供了一个同名而且参数类型(不论是否是默认参数)相同的方法,必须覆盖这个方法来解决。

1.当继承的父类和实现的接口中有相同签名的方法时,优先使用父类的方法。(超类优先原则)

public class SubClass extends MyClass implements MyInterface{

}
public interface MyInterface {
	
	default String getName(){
		return "我是父类接口";
	}

}
public class MyClass {

	public String getName(){
		return "子类";
	}

}
SubClass subClass=new SubClass();

System.out.println( subClass.getName());
子类

2.当实现的多个接口中有相同签名的方法(不论是否是默认参数)时,必须在实现类中通过重写方法解决冲突问题,否者无法通过编译,在重写的方法中可以通过 接口名.super.方法名(); 的方式显示调用需要的方法。(接口冲突)

public class SubClass  implements MyFun, MyInterface{

	@Override
	public String getName() {
		return MyInterface.super.getName();
	}

}

public interface MyFun {
	
	default String getName(){
		return "哈哈哈";
	}

}
public interface MyInterface {
	
	default String getName(){
		return "我是父类接口";
	}
}

2.接口中的静态方法

public interface MyInterface {
	
	default String getName(){
		return "我是父类接口";
	}
	
	public static void show(){
		System.out.println("接口中的静态方法");
	}

}

调用:
   MyInterface.show();


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值