2015-03-02 55 views
0

爲什麼類對象中的方法受到保護爲什麼它不公開是否有任何有效的原因?爲什麼對象類中的方法受到保護?

protected native Object clone() throws CloneNotSupportedException; 
+0

它的Java的功能性克隆_implementation detail_的計算器接受的答案。國際海事組織關於[Cloneable接口]的文檔(http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable.html)可以幫助(甚至可能有一個公共的Object.clone( )方法,即使幾乎總是拋出一個異常,但是用這個_pattern_你可以分開基類給出的基本_behavior_)。 – 2015-03-02 11:14:06

回答

0

這允許類的設計者決定是否適合類支持克隆。 protectedObject.clone()方法是什麼類調用來實現克隆......如果它想要本地克隆機制。

如果我想讓我的類可以克隆,我添加一個公共克隆方法;例如

public class MyClass implements Cloneable { 
    .... 
    public Object clone() { 
     super.clone(); 
    } 
} 

如果我想克隆可用內部,我寫:

public class MyClass implements Cloneable { 
    .... 
    // Don't provide a public override for `clone()`. 
} 

如果我不想要克隆,我寫:

public class MyClass { 
    ... 
} 

相比之下,如果Object.clone()public,那麼每個對象都會在理論上支持cl就......就編譯器而言!這將是一件壞事,因爲有很多課程克隆沒有意義,有害或無法實施。


finalize()的情況下,這將是有害的,如果任意代碼可以發起在物體上最終確定邏輯。 GC只有這樣做纔有意義,或者在某些情況下,類和它的子類可以做到這一點。

請注意,如果您實施finalize()方法,建議鏈接到超類finalize();例如

protected void finalize() { 
     // Do my finalization 
     super.finalize(); 
    } 

...即使父目前有一個終結。

1

如果C2類擴展C1,C1包含公共方法,則C2中的方法(如果被覆蓋)也必須是公共的;在重寫時,Java規定對方法的訪問額外限制是非法的。如果C1包含受保護的方法,則C2中的覆蓋方法可能會受到保護或公開。

下面是詳細信息

Why does the Object class in Java contain protected methods?

相關問題