2 回答

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個(gè)贊
不需要用new是因?yàn)間etScreenSize實(shí)例方法內(nèi)部已經(jīng)根據(jù)屏幕的尺寸new好了一個(gè)Dimension類的對象,只需要返回這個(gè)對象就行了。
前面已經(jīng)提到了getScreenSize是一個(gè)實(shí)例方法,更準(zhǔn)確地講它是類Toolkit的一個(gè)實(shí)例方法,所以必須通過一個(gè)Toolkit類的對象才能調(diào)用這個(gè)方法。
而getDefaultToolkit是類Toolkit的一個(gè)靜態(tài)方法(所以通過類名.方法名的形式調(diào)用),這個(gè)方法會(huì)返回一個(gè)類Toolkit的對象,再通過這個(gè)返回的對象就可以調(diào)用getScreenSize了。
所以,不能通過Toolkit.getScreenSize來調(diào)用getScreenSize方法,因?yàn)樗皇庆o態(tài)方法需要通過一個(gè)類Toolkit的實(shí)例來調(diào)用,而靜態(tài)方法getDefaultToolkit就可以返回一個(gè)類Toolkit的實(shí)例。

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超4個(gè)贊
首先,Dimension di=Toolkit.getDefaultToolkit().getScreenSize();這個(gè)引用方法是正確的引用方法。
你的疑問有三個(gè).
第一,為什么可以不用new,因?yàn)樵诘玫揭粋€(gè)實(shí)體對象除了new外,也可以通過方法返回一個(gè)實(shí)體對象。在上面那條語句里就是getScreenSize()這個(gè)方法,至于getScreenSize()方法里是怎么創(chuàng)建Dimension 對象的,你不需要關(guān)心,這就是封裝的一種。
第二,為什么Toolkit.getScreenSize();不能直接引用,因?yàn)檫@個(gè)方法不是靜態(tài)方法
這個(gè)方法必須使用一個(gè)實(shí)體類去引用,而getDefaultToolkit()方法才是一個(gè)靜態(tài)方法,他可以通過類名+方法名直接引用,作用就是返回一個(gè)Toolkit的實(shí)體類。
之后就可以用這個(gè)實(shí)體類去調(diào)用非靜態(tài)方法了。分解一下代碼你就能看明白了。
第三,為什么一個(gè)抽象類可以直接被引用。
抽象對象和接口是可以被引用和實(shí)例化的,只是不能通過new自己來進(jìn)行實(shí)例化,首先這點(diǎn)要弄清楚。
抽象類和接口,可以通過方法,或者new他的非抽象子類來進(jìn)行實(shí)例化,之后使用方法就和普通類是一樣的了。
而調(diào)用靜態(tài)方法只需要類名或者接口名就可以了,在java8里還增加了default關(guān)鍵字來定義默認(rèn)方法體,接口也可以有自己的方法體了。
- 2 回答
- 0 關(guān)注
- 374 瀏覽
添加回答
舉報(bào)