本帖最后由 longlangcx 于 2013-7-15 13:27 编辑
这俩方法被protected修饰,相当于只在本包或子类中才能访问。就好像private一样,你自定义一个Test类,可以使用对象名.方法名的形式访问其他类的对象的private方法么?不可以。。那么你自定义了一个Test类,自然也不可以访问其他对象的protected方法。道理一样,权限不够。想访问String的clone方法,除非是子类,可是String类时final的不可继承,那么除非你把你的Test类丢到java.lang软件包中,否则无法访问String的clone方法。String的clone方法只有他自己的方法才可以调用。
至于为啥要这样设计呢?道理很简单,一个对象在哪里存活的好好的,突然不知道从哪里来个家伙调用了这个对象的finalize()方法,他不就挂了么~?咋死的都不知道!这当然不怎么合理。
至于clone方法也是一样,啥是clone,创建一个原对象的副本,等于是创建了一个新的对象。但不是每个对象都希望无关人员可以克隆自己的。
还记得单例设计模式么?就是为了对象的唯一性。要是clone方法是public的话,那我Singleton.getInstance().clone(),等于创建了一个单例的副本,那这个类不就相当于有俩对象了么~?
也就是说,通常情况下,你不见得希望别人可以创建你对象的副本,或者随意调用你的对象的finalize()方法,那么默认的protected就保证了这一点。
如果,你确实有需要把这两个方法暴露出来,覆盖它并声明为public就好了。 |