在撰寫Java程式時,經常會有臨時繼承某個類別或實作某個介面並建立實例的需求,由於這類子類別或介面實作類別只使用一次,不需要為這些類別定義名稱,這時可以使用匿名內部類別(Anonymous inner class)來解決這個需求。
透過Object型態的變數,能進行的多型操作,就只限於Object定義的方法,建立匿名類別實例,基本上沒太大用處。若是使用var自動推斷區域變數型態,繼承Object來建立匿名類別實例,倒是可以有特別的作用。
因為編譯器自動推斷出匿名的型態,你就可以直接取得定義的值域、操作新增的方法,若想臨時建立物件來組合某些資料或操作,這是可行的方式之一。
介面定義時可以有預設實作,或者稱為預設方法(Default methods),使用default關鍵字修飾,預設權限為public。預設方法令介面看來像是有抽象方法的抽象類別,然而因為介面本身不能定義資料成員,預設方法的實作中無法直接使用資料成員。
每個Ball實例就會擁有Comparable定義的預設方法。因為類別可以實作多個介面,運用預設方法,就可以在某介面定義可共用的操作,若有個類別需要某些可共用操作,只需要實作相關介面,就可以混入(Mixin)這些共用的操作了。