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()); } }