作者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