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