2013-05-06 68 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

相关问题