默认方法,及在Java 8 中我们可以定义具有实体的方法,需要加上default关键字来修饰。

例如:
Person.java

1
2
3
4
5
6
7
8
package com.devnp;

public interface Person {

default void print(){
System.out.println("Hello World.");
}
}

PersonImpl.java

1
2
3
4
5
package com.devnp;

public class PersonImpl implements Person {

}

Java8Test.java

1
2
3
4
5
6
7
8
9
10
package com.devnp;

public class Java8Test {

public static void main(String[] args) {

new PersonImpl().print(); ;
}

}

结果:
Hello World.

当然,在接口中默认的方法可以不止一个可以添加多个

Person.java

1
2
3
4
5
6
7
8
9
10
11
12
package com.devnp;

public interface Person {

default void print(){
System.out.println("Hello World.");
}

default void print2(){
System.out.println("Hello World2.");
}
}

在接口中还可以声明静态方法

Person.java

1
2
3
4
5
6
7
8
package com.devnp;

public interface Person {

static void print(){
System.out.println("Hello World3.");
}
}

注意:
1.接口默认方法不能像普通类那样去覆写 Object 类的 equals、hashCode 和 toString 方法。
2.接口中的静态方法必须是 public 的,public 修饰符可以省略,static 修饰符不能省略。

为什么会出现这个特性?
接口的好处在于是面向对像的,不用去实现具体的逻辑,但同时这样增加了接口和实现类的耦合度,当接口进行修改时,所有实现类都需要修改,默认的方法,在接口中添加新的默认方法,实现类不用全部做出修改。