作者aoksc (重出江湖)
看板java
標題[問題] 請教一個clone()的問題
時間Thu Sep 29 19:57:41 2011
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
1F:推 lachtchlee:Object clone()是Object 類 的 方法格式 don't change 09/29 20:12
2F:推 LaPass:newObj = (myBorder)clone(); ← 有加嗎? 09/29 20:14
3F:→ lachtchlee:the return type 09/29 20:14
4F:→ aoksc:一樓意思是他clone()回傳型態強制是Object嗎? 09/29 20:19
5F:→ aoksc:二樓方法也可以 但還是要轉型 因為你回傳還是Object型態 09/29 20:22
6F:推 lachtchlee:class Object 內定義的 be defined by ~~~ 09/29 20:23
7F:推 LaPass:clone(); ← 這是繼承自Object的方法,你沒辦法改他。 09/29 20:25
8F:→ lachtchlee:所以不要改 也 不能改變它 09/29 20:26
9F:→ aoksc:所以意思是說clone本身定義的return他就已經是轉型成Object? 09/29 20:32
10F:推 tomap41017:應該說你在沒有override clone的情況下,預設就是看到 09/29 20:50
11F:推 tomap41017:Object所寫的,當然是return Object囉 09/29 20:53
12F:→ lachtchlee:就算override clone() 它還是 return Object 09/29 21:12
13F:推 LaPass:Java 的 override不能改型別 C#才可以 09/29 21:13
14F:→ hetea:Object java.lang.Object.clone() 回傳是Object 09/29 21:54
15F:→ sbrhsieh:就 Java PL 層面來說,overriding method return type 09/30 00:59
16F:→ sbrhsieh:不是非得同 overriden mehod return type。Java 1.5 開始 09/30 01:01
17F:→ sbrhsieh:有 covariant returns. 09/30 01:08
18F:推 LaPass:我錯了 剛剛試了一下 override clone()的傳回型別可以改 09/30 08:28