JAVA8 新特性 接口中的静态方法和默认方法

JAVA8中关于接口的新特性,之后还有关于Lambda表达式的函数式接口

接口中的静态方法和默认方法

Java8接口新增默认方法与静态方法

java8之前接口中属性是静态常量,方法都是抽象方法

package Chating;
public class Jie {
	public static void main(String[] args) {
	}
}
interface AA{
	int a = 1;//静态常量
	void show();//抽象方法
	//在接口中可以定义静态方法和默认方法
	public static void print() {
		System.out.println("接口中的静态方法");
	}
	public default void def() {
		System.out.println("接口中的默认方法");
	}
}

default默认方法

缘由:假设要给接口增加方法,如果是抽象方法,那一些已运行的项目就会编译出错(必须实现所有抽象方法)都需要改动,为了解决这个问题。就出现了默认方法,被default修饰的方法,不会被强制要求重写。能让我们更好的扩展新的类功能。

default特点

  • 默认方法可以直接调用,可以不用在实现类中实现
  • 一类实现多接口,而多接口中存在重名默认方法,则才必须对重名的默认方法实现

重名默认方法实现

  • 可以自己去实现重名的方法

  • 可以指明用哪个接口的方法

格式:接口名.super.默认方法名();

default类优先原则

实现类同时继承的父类和实现的接口中有重名的方法,这时要遵循类优先原则

即 默认是用父类中方法的实现

package Chating;

public class Jie {
	public static void main(String[] args) {
		Stu pp = new Stu();
		pp.def();//用实现类调用方法
		System.out.println("---------------");
		new Stu().def();//用匿名的调用也可
	}
}
interface AA{
	public static void print() {
		System.out.println("接口AA中的静态方法");
	}
	public default void def() {
		System.out.println("接口AA中的默认方法");
	}
}
interface BB{
	public default void def() {
		System.out.println("接口BB中的默认方法");
	}
}
class Stu implements AA,BB{

	@Override
	public void def() {//可以自己为重名的方法提供实现
		System.out.println("重改后的def方法");
		AA.super.def();//可以指定哪个接口中的方法
	}
	
}

在这里插入图片描述

package Chating;

public class Jie {
	public static void main(String[] args) {
		Stu stu = new Stu();
		stu.def();
	}
}
interface AA{
	public default void def() {
		System.out.println("接口AA中的默认方法");
	}
}
interface BB{
	public default void def() {
		System.out.println("接口BB中的默认方法");
	}
}
class Fu1{
	public void def() {
		System.out.println("父类Fu1中的def方法");
	}
}
class Stu extends Fu1 implements AA,BB{
	//两个接口和父类中都有重名方法,采用类优先的原则。默认调用类中的方法
}

在这里插入图片描述

static静态方法

缘由:一个类实现多接口,而多个接口中有重名的静态方法就很难区分,因此接口中的静态方法不会继承给实现类,可以直接调用。

格式:接口名.静态方法名() 调用静态方法

package Chating;

public class Jie {
	public static void main(String[] args) {
		//通过接口名.静态方法名() 调用静态方法
		BB.def();
		AA.def();
		CC.def();
	}
}
interface AA{
	public static void def() {
		System.out.println("接口AA中的静态方法");
	}
}
interface BB{
	public static void def() {
		System.out.println("接口BB中的静态方法");
	}
}
interface CC{
	public static void def() {
		System.out.println("接口CC中的静态方法");
	}
}
class Stu implements AA,BB,CC{
	//多个接口中有重名的静态方法
}

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值