2 回答

TA貢獻1852條經(jīng)驗 獲得超1個贊
接口只是其子類的“規(guī)范”。他們通常不提供任何實現(xiàn)。所以本質(zhì)上,接口是在 Java 中可以看到對象的最抽象的方式。但是,Java 8 及更高版本提供了帶有實現(xiàn)default的static方法,因此這使得接口更加類似于抽象類。由于每個對象都繼承自 Object 類,并且由于接口只是對象的抽象表示,因此它們也需要從 Object 繼承。
請注意,每個未明確指定其超類的類、抽象類和接口,在編譯時都將分配 Object 類作為它們的直接超類。
這是因為 Object 類已經(jīng)提供了一些所有對象都需要實現(xiàn)的方法(例如equals(),toString()...)。特別有用的方法是hashCode()在各種哈希表中使用,或wait()在notify()編寫notifyAll()多線程程序時使用。由于繼承,您幾乎不需要顯式調(diào)用這些方法,但是,如果類沒有從 Object 繼承,您將需要自己為每個類編寫所有這些方法。因此,對象類在一定程度上減少了編程工作量。
此外,當(dāng)值未知時,這也可以創(chuàng)建類型為“any”的參數(shù)。
void printObject(Object any) {
System.out.println("Printing object of type: " + any.getClass().getName());
System.out.println(any); // toString called "implicitly"
}
如果可能,請盡量避免使用這種代碼。
添加回答
舉報