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();//接口中的静态方法
	}

}
相关文章
相关标签/搜索