第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么接口是 Java 中 Object 的子類型?

為什么接口是 Java 中 Object 的子類型?

萬千封印 2022-11-10 16:42:43
為什么Java中沒有Object的超接口子類型的接口?我在這里要問的是為什么語言創(chuàng)建者會做出這種設(shè)計選擇,即這種子類型化的實際目的是什么?
查看完整描述

2 回答

?
江戶川亂折騰

TA貢獻1851條經(jīng)驗 獲得超5個贊

這種子類型的實際目的是什么?

實際目的是您可以Object使用類型為接口的變量調(diào)用方法,最常見的toString()是 、equals()hashCode()

為了使接口類型的變量具有非空值,必須為其分配對象實例。由于所有對象都擴展Object,因此可以保證任何實現(xiàn)接口的對象也擴展Object。

例如List,是一個接口,但myList.toString()即使toString()沒有為該接口定義,您也可以調(diào)用。


查看完整回答
反對 回復(fù) 2022-11-10
?
小怪獸愛吃肉

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"

}

如果可能,請盡量避免使用這種代碼。


查看完整回答
反對 回復(fù) 2022-11-10
  • 2 回答
  • 0 關(guān)注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號