作者PsMonkey (痞子军团团长)
看板java
标题Re: [问题] Object的clone()问题
时间Fri Mar 7 00:59:20 2014
先说,我什麽都不会,JLS 也不敢读(怕马上睡着)
我只会写测试 code (艹)
※ 引述《michael47 (hitman)》之铭言:
: public class foo {
: int count;
: }
: public class Demo {
: public static void main(String[] args) {
: foo foo1 = new foo();
: foo foo2 = foo1.clone();
: /* 这里呼叫的是Object class的clone() */
: /* 不是所有的objects都有继承到Object class的clone()吗? */
: /* 但是这样好像不可以 */
: }
: }
: 我举例的code很简略,我的问题是为何不能直接使用Object的clone(),
: Object的clone()不是protected,所有的objects不是Object class以及
: Object class的subclass的instances,为何不能直接使用Object的clone()?
首先,我得说,你如果要探究 protected
那 package 就不能忽略
毕竟 protected 跟 default(也就是 package)的 visibility 差别
是跟 package 有关的
然後,先撇开 clone(),直接测试 protected
(档名跟路径我就省略了)
package inside;
public class Parent {
protected void foo() {}
}
//同个 package 的小孩
package inside;
public class Child extends Parent {
void test() {
this.foo();
}
}
//外头偷生的小孩 [误]
package outside;
import inside.Parent;
public class ChildOutside extends Parent {
void test() {
this.foo();
}
}
下面是同段测试码,但是分别放在 inside / outside 下
注解自己删除对应的 [逃]
//package inside;
//package outside;
//import inside.Parent;
//import inside.Child;
//import outside.ChildOutside;
public class Main {
public static void main(String[] args) {
Parent parent = new Parent();
parent.foo(); //
pakcage outside 会炸 error
Child child = new Child();
child.foo(); //pakcage outside 会炸 error
ChildOutside childOutside = new ChildOutside();
childOutside.foo(); //pakcage outside 会炸 error
}
}
接着改写 ChildOutside,让他 override foo() 如下
@Override
protected void foo() {}
那麽
* Main(inside) 的 childOutside.foo() 会炸 error
* Main(outside)的 parent.foo() 跟 child.foo() 会炸 error
这样算有回答到你的其中一部分问题吗?
(谜之声:你xx的有打算回答吗?)
====
有错请诘谯,我会出来面对的 Orz
--
钱锺书:
说出来的话
http://www.psmonkey.org
比不上不说出来的话
Java 版 cookcomic 版
只影射着说不出来的话
and more......
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.129.130.252
※ 编辑: PsMonkey 来自: 220.129.130.252 (03/07 01:00)
1F:推 michael47:你举的例子是default的modifier,还是感谢 03/07 11:44
2F:→ PsMonkey:我完全看不懂你推的那一句 Orz 03/07 11:52
3F:推 michael47:sorry,我看错了,我回的上面那句是错的 03/07 12:11
4F:推 michael47:所以你的意思是一定要在同一个package才可以吗? 03/07 12:24