6-1 接口的默认方法

public interface PersonO {

    /*default String getName(){
        return getClass().getName();
    }*/
    
    int size();
    default boolean max(){
        return size() == 0;
    }
    
    String getName();
}
public interface StudentO {
    
//    default String getName(){
//        return this.getClass().getName()+"_"+hashCode();
//    }

    String getName();
    
}
public class PersonT {

    public String getName() {
        return getClass().getName();
    }
}
public class InterFaceTest extends PersonT implements PersonO,StudentO{

    
    @Override
    public int size() {
        return 0;
    }
    

    /**
     * @author:lixh
     *
     * Java8之后接口出现了default方法
     *
     * 1.默认方法的一个重要用途是接口演化,接口扩展了方法,实现类不用必须实现
     *
     * 2.解决默认方法冲突
     * 1)超类优先,如果超类实现了一个默认方法,同名且相同参数类型的默认方法会被忽略。
     * 2)如果一个超接口提供了一个默认方法,另一个接口提供了一个同名且相同参数的方法(不管是否默认),
     *             要重写方法来解决冲突
     * 3)如果两个接口都没有为共享方法提供默认实现,不存在冲突。实现这个方法,或者不实现(抽象类)
     *
     * 一个类的超类和接口实现相同的方法,超类优先,接口被忽略。
     */
//二义性 /* 两个默认 * @Override public String getName() { return PersonO.super.getName(); } @Override public String getName() { // TODO Auto-generated method stub return StudentO.super.getName(); }*/ /* 一个默认一个无默认 * @Override public String getName() { // TODO Auto-generated method stub return PersonO.super.getName(); } @Override public String getName() { // TODO Auto-generated method stub return null; }*/ /* * 两个无默认 @Override public String getName() { // TODO Auto-generated method stub return null; }*/ //超类优先 @Override public String getName() { // TODO Auto-generated method stub return super.getName(); } public static void main(String ... arg){ InterFaceTest i1 = new InterFaceTest(); System.out.println(i1.getName()); } }

 

posted @ 2018-01-09 10:31  aLa神灯  阅读(100)  评论(0编辑  收藏  举报