在 Java 7 和之前的版本中,接口 interface 是不能包含具体的方法实现的。对于一个接口有多个实现的时候,我们通常的做法就是让所有的实现继承另一个基础类,然后在这个基础类中实现这个方法。
Java 8 中为接口提供了一个新的功能,允许某个接口方法有个默认实现。
1
默认方法
Java 8 为 接口 ( interface ) 中引入了 「 默认方法 」( default method ) 实现这个新的概念。
default
关键字,用于标识这个方法是可以有具体的实现。有了 default
关键字,我们就可以在所有集合都实现的接口 Collection<E>
中添加一个 forEach
方法啦。
这是一个非常重要的新功能,它的出现,Java 8 及以后的版本,添加新功能的速度明显加快了很多。
2
默认方法语法
package com.sjh.test.java8.service;
public interface Greeter {
default void method(){
System.out.println(" Hello ,我是二哥!");
}
}
从语法中可以看到,一个接口默认方法和普通的接口方法声明有两个不同点:
1、 接口默认方法可以有具体实现
2、 接口默认方法需要使用 default
关键字修饰。
3
默认方法特征
1、 一个接口可以有任意数量的默认方法,也可以没有默认方法
2、 如果一个类实现的两个接口都有一个同名的默认方法,那么该类必须自己实现同样的方法,然后在实现内部可以调用相应接口的方法
4
代码范例
A
接口默认方法
package com.sjh.test.java8.service;
public class Test1 {
public static void main(String[] args)
{
Greeter gt = new Greeter(){};
gt.greeter("二哥!");
}
interface Greeter {
default public void greeter(String name)
{
System.out.println("Hello ," + name );
}
}
}
运行结果:
/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/...com.sjh.test.java8.service.Test1
Hello ,二哥!
Process finished with exit code 0
B
一个接口可以有多个默认方法
package com.sjh.test.java8.service;
public class Test2 {
public static void main(String[] args)
{
Greeter gt = new Greeter(){};
gt.greeter("二哥!");
gt.greeterEn("JayLa!");
}
interface Greeter {
default public void greeter(String name)
{
System.out.println("你好," + name );
}
default public void greeterEn(String name)
{
System.out.println("Hello," + name );
}
}
}
运行结果:
/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/...com.sjh.test.java8.service.Test2
你好,二哥!
Hello,JayLa!
Process finished with exit code 0
C
一个类实现了多个具有同名的默认方法接口
如果一个类实现了两个或两个以上的接口,而这些接口有两个或两个以上实现了相同的方法名的默认方法,最简单的方法就是类自己实现一个相同的方法。
package com.sjh.test.java8.service;
public class Test3 {
public static void main(String[] args)
{
Test3 tester = new Test3();
tester.run();
}
public void run()
{
Greeter gt = new Hello();
gt.greeter("二哥!");
}
class Hello implements Greeter,GreeterEn {
public void greeter(String name)
{
System.out.println("1、你好," + name );
}
}
interface Greeter {
default public void greeter(String name)
{
System.out.println("2、你好," + name );
}
}
interface GreeterEn {
default public void greeter(String name)
{
System.out.println("3、Hello," + name );
}
}
}
运行结果:
/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/...com.sjh.test.java8.service.Test3
1、你好,二哥!
Process finished with exit code 0
还可以调用相关接口的默认方法
package com.sjh.test.java8.service;
public class Test4 {
public static void main(String[] args)
{
Test4 tester = new Test4();
tester.run();
}
public void run()
{
Greeter gt = new Hello();
gt.greeter("二哥!");
}
class Hello implements Greeter,GreeterEn {
public void greeter(String name)
{
Greeter.super.greeter(name);
}
}
interface Greeter {
default public void greeter(String name)
{
System.out.println("1、你好," + name );
}
}
interface GreeterEn {
default public void greeter(String name)
{
System.out.println("2、Hello," + name );
}
}
}
运行结果:
/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/...com.sjh.test.java8.service.Test4
1、你好,二哥!
Process finished with exit code 0
end
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有