【发布时间】:2011-03-11 00:14:56
【问题描述】:
如果我说
class A{
}
然后它隐式继承 Object 类。所以我的类如下:
class A{
protected Object clone(){
} /// Here i am not overridning
//All the other methods (toString/wait/notify/notifyAll/getClass)
}
现在为什么我不能访问 Class B 中的 clone() 方法,它在 Class A 的同一个包中。
Class B{
A a = new A();
a.clone();
**
}
//** 表示克隆在 Object 类中受保护。但是我没有访问 Object 的 clone 方法。这里我调用了 A 类的 clone 方法,但我还没有重载。
【问题讨论】:
-
您的 sn-ps 具有误导性。 class A {} 和 class A { protected A clone() {} } 根本不等价。在第一个中,您在 sn-p 2 中没有实现 a 的 clone 方法。您调用的错误不会在 sn-p 2 中显示。
-
它不会回答你的问题,但在新的 API 中更喜欢静态工厂方法或复制构造函数来 clone()。
-
你评论
/// Here i am not overridning是什么意思?你怎么不覆盖它?在 Object 中,clone方法与A.clone具有完全相同的签名,因此它会覆盖它。
标签: java oop access-modifiers