jdk1.8的接口新特性
default
其他網址
JDK1.8增加default方法。實際開發中應該謹慎使用:在複雜的繼承體系中,默認方法可能引起歧義和編譯錯誤。
package com.example;
interface MyInterface{
default void sayHello(){
System.out.println("sayHello");
}
}
class MyInterfaceImpl implements MyInterface{
public void test(){
MyInterface myInterface = new MyInterfaceImpl();
myInterface.sayHello();
}
}
public class Demo {
public static void main(String[] args) {
MyInterfaceImpl impl = new MyInterfaceImpl();
impl.test();
}
}
運行結果
sayHello
注意:如果兩個接口都用default修飾同一方法,則會報錯
package com.example;
interface MyInterface1{
default void sayHello(){
System.out.println("sayHello(1)");
}
}
interface MyInterface2{
default void sayHello(){
System.out.println("sayHello(2)");
}
}
class MyInterfaceImpl implements MyInterface1,MyInterface2{
public void test(){
MyInterface1 myInterface = new MyInterfaceImpl();
myInterface.sayHello();
}
}
public class Demo {
public static void main(String[] args) {
MyInterfaceImpl impl = new MyInterfaceImpl();
impl.test();
}
}
解決辦法:在實現類中重寫該方法。
package com.example;
interface MyInterface1{
default void sayHello(){
System.out.println("sayHello(1)");
}
}
interface MyInterface2{
default void sayHello(){
System.out.println("sayHello(2)");
}
}
class MyInterfaceImpl implements MyInterface1,MyInterface2{
public void test(){
MyInterface1 myInterface = new MyInterfaceImpl();
myInterface.sayHello();
}
@Override
public void sayHello() {
System.out.println("sayHello(Impl)");
}
}
public class Demo {
public static void main(String[] args) {
MyInterfaceImpl impl = new MyInterfaceImpl();
impl.test();
}
}
運行結果
sayHello(Impl)
static
JDK1.8新增了static函數。static修飾的方法也是非抽象方法,有自己的方法體,在接口中定義一個靜態方法,該方法可以直接用< 接口名.方法名() >的形式來調用。相當於調用類的靜態方法一樣
package com.example;
interface MyInterface{
static void sayHello(){
System.out.println("sayHello");
}
}
public class Demo {
public static void main(String[] args) {
MyInterface.sayHello();
}
}
運行結果
sayHello