Java8新特性之接口中的默認方法與靜態方法

 

默認方法

        Java 8中容許接口中包含具備具體實現的方法,該方法稱爲「默認方法」,默認方法使用default關鍵字修飾。java

package www.muzi.com.interfaceFun;

/**
 * Date:2017/3/13 14:19
 */
public interface RoleInterface {
	int ss = 100;
	default String getName(){
		return "張三";
	}
}

接口默認方法的」類優先」原則

若一個接口中定義了一個默認方法,而另一個父類或接口中又定義了一個同名的方法時:ide

  •  選擇父類中的方法。若是一個父類提供了具體的實現,那麼接口中具備相同名稱和參數的默認方法會被忽略。
    Role2Interface .java
    package www.muzi.com.interfaceFun;
    
    /**
     * Date:2017/3/13 14:19
     */
    public interface Role2Interface {
    	default String getName(){
    		return "李四";
    	}
    }

    MyClass.javaspa

    package www.muzi.com;
    
    /**
     * Date:2017/3/13 14:42
     */
    public class MyClass {
    	public String getName(){
    		return "哈哈哈哈哈";
    	}
    }

    SubClass.javacode

  • package www.muzi.com;
    
    import www.muzi.com.interfaceFun.Role2Interface;
    
    /**
     * Date:2017/3/13 14:43
     */
    public class SubClass extends MyClass implements Role2Interface {
    
    }

    TestInterface.java接口

    package www.muzi.com;
    
    /**
     * Date:2017/3/13 14:23
     */
    public class TestInterface{
    	public static void main(String[] args) {
    		SubClass sub = new SubClass();
    		System.out.println(sub.getName());//哈哈哈哈哈
    	}
    
    }

    MyClass類與接口Role2Interface共同存在getName()方法,在調用getName()方法時,調用的是MyClass類中的getName()方法,而Role2Interface接口的中getName()方法別忽略了。get

  • 接口衝突。若是一個父接口提供一個默認方法,而另外一個接口也提供了一個具備相同名稱和參數列表的方法(無論方法是不是默認方法),那麼必須覆蓋該方法來解決衝突
    RoleInterface.java
    package www.muzi.com.interfaceFun;
    
    /**
     * Author:LiHongMei
     * Date:2017/3/13 14:19
     */
    public interface RoleInterface {
    	int ss = 100;
    	//默認方法
    	default String getName(){
    		return "張三";
    	}
    }

    SubClass.javaclass

    package www.muzi.com;
    
    import www.muzi.com.interfaceFun.Role2Interface;
    import www.muzi.com.interfaceFun.RoleInterface;
    
    /**
     * Date:2017/3/13 14:43
     */
    public class SubClass /*extends MyClass*/ implements Role2Interface,RoleInterface {
    
    	@Override
    	public String getName() {
    		return RoleInterface.super.getName();
    	}
    }

    TestInterface.javaimport

    package www.muzi.com;
    
    /**
     * Date:2017/3/13 14:23
     */
    public class TestInterface{
    	public static void main(String[] args) {
    		SubClass sub = new SubClass();
    		System.out.println(sub.getName());//張三
    	}
    
    }

     

靜態方法

        Java8 中,接口中容許添加靜態方法。方法

 Role2Interface.javaim

package www.muzi.com.interfaceFun;

/**
 * Author:LiHongMei
 * Date:2017/3/13 14:19
 */
public interface Role2Interface {
	default String getName(){
		return "李四";
	}

	public static void show(){
		System.out.println("接口中的靜態方法");
	}
}

TestInterface.java

package www.muzi.com;

import www.muzi.com.interfaceFun.Role2Interface;

/**
 * Date:2017/3/13 14:23
 */
public class TestInterface{
	public static void main(String[] args) {
		Role2Interface.show();//接口中的靜態方法
	}

}
相關文章
相關標籤/搜索