匿名內部類實現Comparator介面,沒有重寫所有方法,為何不報錯
阿新 • • 發佈:2019-02-12
//介面定義
interface Comparator{
int compare(T o1,T o2);
boolean equals(Object obj);
}
//物件類定義
public class User{
private String name;
private float chinese;
private float math;
private float english;
public Student(){
super();
}
public Student(String name,float math,float english,float english){
super();
this.name=name;
this.chinese=chinese;
this.math=math;
this.english=english;
}
public String toString(){
return "Student [name=" + name + ", chinese=" + chinese + ", math=" + math + ", english=" + english +"]";
}
}
//測試類
public class test {
public static void main(String[] args) {
// 建立帶構造器的集合物件,使用匿名物件實現Comparator介面
TreeSet treeset=new TreeSet<>(new Comparator() {
//實現介面,重寫了compare()方法,具體過程看不懂可以不看,對於理解無礙
public int compare(Student o1, Student o2) {
float num=o2.getChinese()+o2.getEnglish()+o2.getMath()-o1.getChinese()-o1.getEnglish()-o1.getMath();
num=num==0?o2.getName().compareTo(o1.getName()):num;
num=num==0?o2.getChinese()-o1.getChinese():num;
num=num==0?o2.getEnglish()-o1.getEnglish():num;
num=num==0?o2.getMath()-o1.getMath():num;
return (int)num;
}
});
treeset.add(new Student("zhangsan",30,40,86));
treeset.add(new Student("zhangsan1",32,60,80));
treeset.add(new Student("zhangsan2",30,45,30));
treeset.add(new Student("zhangsan3",30,10,80));
treeset.add(new Student("zhangsan4",60,43,80));
treeset.add(new Student("zhangsan1",32,60,80));
treeset.add(new Student("zhangsan1",32,61,79));
for(Student i:treeset)
System.out.println(i);
}
}
實現介面的方法:類實現:重寫介面所有方法 抽象子類:抽象子類繼承介面 有朋友問:你的匿名物件實現介面怎麼實現的?怎麼還能直接new介面呢? 答:匿名物件類實現介面使用了簡化寫法,在使用匿名內部類時會自動建立一個實現類,其實你不是new了那 個介面,你是new了那個實現類! 問:你的重寫方法怎麼沒有全部重寫介面的 還記的上面那個臨時建立的實現類嗎,他全部重寫了介面方法,只是方法體是空的。我雖然只重寫了部 分方法,但是其他方法已經被臨時類重寫了只不過是空方法而已!
實現介面的方法:類實現:重寫介面所有方法 抽象子類:抽象子類繼承介面 有朋友問:你的匿名物件實現介面怎麼實現的?怎麼還能直接new介面呢? 答:匿名物件類實現介面使用了簡化寫法,在使用匿名內部類時會自動建立一個實現類,其實你不是new了那 個介面,你是new了那個實現類! 問:你的重寫方法怎麼沒有全部重寫介面的 還記的上面那個臨時建立的實現類嗎,他全部重寫了介面方法,只是方法體是空的。我雖然只重寫了部 分方法,但是其他方法已經被臨時類重寫了只不過是空方法而已!