1. 程式人生 > >Java8新特性(四)------介面中可以定義方法體

Java8新特性(四)------介面中可以定義方法體

 Java8比起以前的版本存在很大的變化,我們知道在之前的版本中介面只能是定義抽象的方法,是不能定義實現的,但是在java8環境下,這個不可能已經變得可能。下面我們通過例子一步一步的來講解下java8的用法。

 定義靜態方法

  在介面中定義的靜態方法,不是抽象的,具體實現的,可以直接使用介面名稱呼叫。

/**
 * Created by xiaona on 2016/5/30.
 */
public interface TestMethod {
    public static void method() {
        /**
         * 1、定義一個靜態的帶有方法體的方法
         * 2、介面不能建立物件,呼叫靜態方法不需要物件
         * 3、介面名呼叫
         */
        System.out.println("介面中靜態方法");

    }

 呼叫:

  public static void main( String[] args ) {
        /**
         * 介面名稱,直接呼叫---TestMethod(介面名稱)
         */
        TestMethod.method();

 定義普通方法

  在介面中不僅僅是可以定義靜態方法,還可以進行普通方法的定義,不過不是抽象,java8中,可以使用關鍵字default

//定義介面中預設方法

    /**
     * 不同於靜態方法,預設方法是一個非靜態方法
     * 對於非靜態方法,只能通過物件進行呼叫
     * 但是介面是不能建立物件的名故而我們需要子類來實現介面
     */
    public default void  methodDefault(){
        System.out.println();
    }
}

  呼叫:

//        使用子類物件,呼叫介面中的預設方法
        Inter8Impl inter8 = new Inter8Impl();
        inter8.methodDefault();

//        使用多型的特點,介面指向自己的實現類,呼叫對應的方法
        TestMethod i88=new Inter8Impl();
        i88.methodDefault();
    }

  此外,值得注意的是:面向物件中,java只是支援單繼承,不支援多繼承,一個類只能繼承一個類,

  (1)如果多個介面定義了同樣的靜態方法,

          即使存在實現類,同時實現多個介面,仍然是不可使用實現類名呼叫介面的方法

  (2)如果多個介面定義了同樣的預設方法

         實現類實現多個介面時,必須重寫掉預設方法,否則編譯失敗。

  在介面中可以定義實現的方法體是java8的一大特性,可以定義多個靜態或者預設的方法,靜態必須加上static,預設方法必須加上default關鍵字。