我是靠谱客的博主 乐观石头,最近开发中收集的这篇文章主要介绍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{
	//多个接口中有重名的静态方法
}

在这里插入图片描述

最后

以上就是乐观石头为你收集整理的JAVA8 新特性 接口中的静态方法和默认方法的全部内容,希望文章能够帮你解决JAVA8 新特性 接口中的静态方法和默认方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(30)

评论列表共有 0 条评论

立即
投稿
返回
顶部