2 回答
TA貢獻1851條經驗 獲得超5個贊
不需要用new是因為getScreenSize實例方法內部已經根據屏幕的尺寸new好了一個Dimension類的對象,只需要返回這個對象就行了。
前面已經提到了getScreenSize是一個實例方法,更準確地講它是類Toolkit的一個實例方法,所以必須通過一個Toolkit類的對象才能調用這個方法。
而getDefaultToolkit是類Toolkit的一個靜態方法(所以通過類名.方法名的形式調用),這個方法會返回一個類Toolkit的對象,再通過這個返回的對象就可以調用getScreenSize了。
所以,不能通過Toolkit.getScreenSize來調用getScreenSize方法,因為它不是靜態方法需要通過一個類Toolkit的實例來調用,而靜態方法getDefaultToolkit就可以返回一個類Toolkit的實例。
TA貢獻1946條經驗 獲得超4個贊
首先,Dimension di=Toolkit.getDefaultToolkit().getScreenSize();這個引用方法是正確的引用方法。
你的疑問有三個.
第一,為什么可以不用new,因為在得到一個實體對象除了new外,也可以通過方法返回一個實體對象。在上面那條語句里就是getScreenSize()這個方法,至于getScreenSize()方法里是怎么創建Dimension 對象的,你不需要關心,這就是封裝的一種。
第二,為什么Toolkit.getScreenSize();不能直接引用,因為這個方法不是靜態方法
這個方法必須使用一個實體類去引用,而getDefaultToolkit()方法才是一個靜態方法,他可以通過類名+方法名直接引用,作用就是返回一個Toolkit的實體類。
之后就可以用這個實體類去調用非靜態方法了。分解一下代碼你就能看明白了。
第三,為什么一個抽象類可以直接被引用。
抽象對象和接口是可以被引用和實例化的,只是不能通過new自己來進行實例化,首先這點要弄清楚。
抽象類和接口,可以通過方法,或者new他的非抽象子類來進行實例化,之后使用方法就和普通類是一樣的了。
而調用靜態方法只需要類名或者接口名就可以了,在java8里還增加了default關鍵字來定義默認方法體,接口也可以有自己的方法體了。
- 2 回答
- 0 關注
- 392 瀏覽
添加回答
舉報



