Java基礎系列--接口

jdk1.8的接口新特性

default

其他網址

jdk1.8新特性之default關鍵字 - lcnb - 博客園

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章