看板 java 關於我們 聯絡資訊
http://pastie.org/2610668 請教一下各位 我有問題的是public Object toClone()這個方法內容 以這個程式碼來說23行應該是clone()複製一個相同的myBorder物件指派給newObj 回傳是以父類別Object的型態回傳 因為回傳的時候是Object的型態 所以必須強制轉型myBorder型態才可使用myBorder的方法 這部份沒錯吧? 我的問題是 那如果把17行的回傳型態跟20行的宣告型態改成myBorder 這樣為什麼反而會有問題呢? 是我哪裡誤解了嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 124.8.144.249
lachtchlee:Object clone()是Object 類 的 方法格式 don't change 09/29 20:12
LaPass:newObj = (myBorder)clone(); ← 有加嗎? 09/29 20:14
lachtchlee:the return type 09/29 20:14
aoksc:一樓意思是他clone()回傳型態強制是Object嗎? 09/29 20:19
aoksc:二樓方法也可以 但還是要轉型 因為你回傳還是Object型態 09/29 20:22
lachtchlee:class Object 內定義的 be defined by ~~~ 09/29 20:23
LaPass:clone(); ← 這是繼承自Object的方法,你沒辦法改他。 09/29 20:25
lachtchlee:所以不要改 也 不能改變它 09/29 20:26
aoksc:所以意思是說clone本身定義的return他就已經是轉型成Object? 09/29 20:32
tomap41017:應該說你在沒有override clone的情況下,預設就是看到 09/29 20:50
tomap41017:Object所寫的,當然是return Object囉 09/29 20:53
lachtchlee:就算override clone() 它還是 return Object 09/29 21:12
LaPass:Java 的 override不能改型別 C#才可以 09/29 21:13
hetea:Object java.lang.Object.clone() 回傳是Object 09/29 21:54
sbrhsieh:就 Java PL 層面來說,overriding method return type 09/30 00:59
sbrhsieh:不是非得同 overriden mehod return type。Java 1.5 開始 09/30 01:01
sbrhsieh:有 covariant returns. 09/30 01:08
LaPass:我錯了 剛剛試了一下 override clone()的傳回型別可以改 09/30 08:28