1. 程式人生 > >匿名內部類實現Comparator介面,沒有重寫所有方法,為何不報錯

匿名內部類實現Comparator介面,沒有重寫所有方法,為何不報錯

//介面定義 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了那個實現類!       問:你的重寫方法怎麼沒有全部重寫介面的             還記的上面那個臨時建立的實現類嗎,他全部重寫了介面方法,只是方法體是空的。我雖然只重寫了部             分方法,但是其他方法已經被臨時類重寫了只不過是空方法而已!