2014-03-01 105 views
2

我寫了下面這個類,用Comparable/Serializable接口來操作。爲什麼在compareTo中可以訪問某個類的私有成員?

package testpro; 

public class SerialTest implements Comparable { 
    private int circleSize = 10; 

    private int getCircleSize() { 
    return circleSize; 
    } 

    @Override 
    public int compareTo(Object o) { 
    SerialTest object = (SerialTest) o; 
    if(getCircleSize()>object.getCircleSize()){ // I can access object.getCircleSize() here, but it's private.. why? 
     return 1; 
    } 
    else if(getCircleSize()<object.getCircleSize()){// I can access object.getCircleSize() here, but it's private.. why? 
     return -1; 
    } 
    else{ 
     return 0; 
    } 
    } 
} 

我傳遞一個Object o到compareTo()方法,但getCircleSize()是私有的。那麼這怎麼可能,我有這個機會?我很確定C++不會放過它。

+0

有很多這個問題的重複 - 我只是想找到一個*好*現在。 –

+0

另外:http://stackoverflow.com/questions/4707504/why-can-i-access-a-private-variable-from-main-method(它說明了一點,如何*可以*靜態方法訪問私人成員,永遠,如果可見性是由對象實例確定的?) – user2864740

回答

5

私人表示只能從同一類訪問。而你在同一個班級,鑄造Object oSerialTest object

2

私人方法可以在課堂內部進行訪問。由於這兩種方法都屬於同一個類,所以沒有訪問它的問題。

私有修飾符指定該成員只能在其自己的類中訪問 。

檢查here更多細節

0

您可以訪問來自同一類的私有成員。您覆蓋方法compareTo(),並在其中訪問您的私人成員。

如果沒有來自其他類的訪問者,私人成員不能這樣做。

你可以從這個link中瞭解到這一點。

0

private不能被其他類訪問。但是在課堂上,它可以用於編程。如您的代碼,您可以在生成結果的同時使用該類中的所有私有標識符或方法。

C++也提供了這個功能。您可以輕鬆地在類或方法內使用私有方法來爲函數調用生成響應。這很簡單,合法!

相關問題