[問題] 請教一個clone()的問題

看板java作者 (重出江湖)時間14年前 (2011/09/29 19:57), 編輯推噓8(8010)
留言18則, 6人參與, 最新討論串1/1
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

09/29 20:12, , 1F
Object clone()是Object 類 的 方法格式 don't change
09/29 20:12, 1F

09/29 20:14, , 2F
newObj = (myBorder)clone(); ← 有加嗎?
09/29 20:14, 2F

09/29 20:14, , 3F
the return type
09/29 20:14, 3F

09/29 20:19, , 4F
一樓意思是他clone()回傳型態強制是Object嗎?
09/29 20:19, 4F

09/29 20:22, , 5F
二樓方法也可以 但還是要轉型 因為你回傳還是Object型態
09/29 20:22, 5F

09/29 20:23, , 6F
class Object 內定義的 be defined by ~~~
09/29 20:23, 6F

09/29 20:25, , 7F
clone(); ← 這是繼承自Object的方法,你沒辦法改他。
09/29 20:25, 7F

09/29 20:26, , 8F
所以不要改 也 不能改變它
09/29 20:26, 8F

09/29 20:32, , 9F
所以意思是說clone本身定義的return他就已經是轉型成Object?
09/29 20:32, 9F

09/29 20:50, , 10F
應該說你在沒有override clone的情況下,預設就是看到
09/29 20:50, 10F

09/29 20:53, , 11F
Object所寫的,當然是return Object囉
09/29 20:53, 11F

09/29 21:12, , 12F
就算override clone() 它還是 return Object
09/29 21:12, 12F

09/29 21:13, , 13F
Java 的 override不能改型別 C#才可以
09/29 21:13, 13F

09/29 21:54, , 14F
Object java.lang.Object.clone() 回傳是Object
09/29 21:54, 14F

09/30 00:59, , 15F
就 Java PL 層面來說,overriding method return type
09/30 00:59, 15F

09/30 01:01, , 16F
不是非得同 overriden mehod return type。Java 1.5 開始
09/30 01:01, 16F

09/30 01:08, , 17F
有 covariant returns.
09/30 01:08, 17F

09/30 08:28, , 18F
我錯了 剛剛試了一下 override clone()的傳回型別可以改
09/30 08:28, 18F
文章代碼(AID): #1EX5qumS (java)