Java新特性之接口的兼容

什么是接口的兼容

  Java 8引入了默认方法静态方法,这两个方法可以直接在接口中写实现,不影响接口的实现类,也就是解决了接口兼容的问题。

为什么要接口的兼容

  Java 8之前,每一次对接口的修改都会影响其的全部实现。

注意

  • 实现类中不可以重写静态方法
  • 实现类中可以重写默认方法,需要去掉default关键字
  • 实现类中可以通过类.super.默认方法对默认方法进行重载
  • 接口中的默认方法通过对象.方法调用
  • 接口中的静态方法通过类.方法调用

什么是默认方法

  被default 关键字修饰的方法。

什么是静态方法

  被static 关键字修饰的方法。

如何实现接口的兼容

接口实例

1
2
3
4
5
6
7
8
9
10
11
12
13
public interface Animal {
	public default void run() {
		System.out.println("run");
	};
	
	public static void eat() {
		System.out.println("eat");
	}
	
	public static void sleep() {
		System.out.println("sleep");
	}
}

实现类实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public class Dog implements Animal {
	
//  报错	
//	@Override
//	public default void run() {
//		Animal.super.run();
//	};
	
	@Override
	public void run() {
		System.out.println("dog run");
	};

	public void run2() {
		Animal.super.run();
	};

//  报错
//	@Override
//	public static void eat() {
//		System.out.println("eat");
//	}

//  报错
//	@Override
//	public void eat() {
//		System.out.println("eat");
//	}
	
	public static void eat() {
		System.out.println("dog eat");
	}
	
	public static void sleep() {
		System.out.println("dog sleep");
	}
	
	public static void main(String[] args) {
		Animal a = new Dog();
		a.run();
		
		Animal.eat();
		Animal.sleep();
	}
}

输出结果

1
2
3
dog run
eat
sleep

参考文献

Java 8 新特性
Java 8新特性终极指南

今日诗词

作者信息