2013-05-06 72 views
-7

爲什麼Object類中的方法像equals(),hashcode()等是公共的。如果這些能夠得到保護,那麼就足以滿足這些要求。請解釋。爲什麼在Obejct類中有公共方法,它們可能受到保護?

+0

您應該閱讀有關修飾符之間的區別。 – Maroun 2013-05-06 13:35:25

+0

哪些要求?哈希集要求這兩種方法存在才能正常工作。可能有爭議的是,他們應該已經在一個單獨的界面中(因此是公開的)。 – 2013-05-06 13:35:45

回答

3

錯誤。

除了至少是您的類型的限定符外,您不能從基類調用protected方法。

如果toString()已被保護,class A {}中的代碼只能在A的實例上調用toString()

+0

我仍然無法正確理解它。你能用一個例子來解釋一下嗎?當我運行下面的程序時,它運行良好。 class Superclass { \t \t protected void MyMethod(){ \t \t System.out.println(「Inside superclass method」); \t} \t \t Superclass obj1 = new Superclass(); \t }輸出:在內部超類方法 內部超類方法 公共MyClass類延伸超類{ \t公共靜態無效主要(字符串S []){ \t \t \t \t超類OBJ1 =新超類() ; \t \t obj1.MyMethod(); \t \t \t \t Superclass obj2 = new MyClass(); \t \t obj2.MyMethod(); \t \t \t} } – 2013-05-06 13:48:26

+0

@SandyDrake您無法從另一個類調用受保護的方法。這意味着你不能在String append或println中使用'toString()',你不能在HashMap中使用hashCode(),並且你不能在List中使用equals()。 – 2013-05-06 14:15:36

+0

@SandyDrake:這是因爲受保護的方法在包中也是可見的。將'MyClass'移到不同的包中,這將停止編譯。 – SLaks 2013-05-06 18:23:43

相關問題