Java 实例&;方法隐藏:重点是什么?

Java 实例&;方法隐藏:重点是什么?,java,method-hiding,data-hiding,Java,Method Hiding,Data Hiding,有人能解释一下隐藏实例和方法的原因和好处吗,特别是复制超类成员有什么好处?继承的目的是进一步定义一个类并对其进行改进,这难道不是与继承背道而驰吗?在Java中,当通过继承相关的类中定义了具有相同签名的静态方法时,就会发生方法隐藏。在这种情况下,实例方法不会产生重写 Java语言设计者需要为它指定两种可能的语义之一——选择是隐藏还是覆盖静态方法 我认为他们选择隐藏的原因是它更容易理解和实现。由于静态方法的分派可以在编译时完成,因此它还具有提高性能的巨大潜力 总的来说,这没什么大不了的,因为只要指定

有人能解释一下隐藏实例和方法的原因和好处吗,特别是复制超类成员有什么好处?继承的目的是进一步定义一个类并对其进行改进,这难道不是与继承背道而驰吗?

在Java中,当通过继承相关的类中定义了具有相同签名的静态方法时,就会发生方法隐藏。在这种情况下,实例方法不会产生重写

Java语言设计者需要为它指定两种可能的语义之一——选择是隐藏还是覆盖静态方法

我认为他们选择隐藏的原因是它更容易理解和实现。由于静态方法的分派可以在编译时完成,因此它还具有提高性能的巨大潜力


总的来说,这没什么大不了的,因为只要指定定义隐藏静态方法的类名,就可以访问隐藏方法。

我强烈反对。由于元素只有在静态时才可以隐藏,如果您使用的是通过声明类而不是子类或实例调用静态元素的良好实践,那么这并没有什么区别

例如,从

将输出

The static method in Animal
The instance method in Cat
如您所见,即使使用相同名称实现了另一个静态方法,在Animal中声明的方法也不是真正隐藏的,除非调用
Cat.testClassMethod()
并期望得到相同的结果


这里只是一个抽象继承概念的问题,因为静态元素不是真正继承的,只是子类可以继承。

不要忘记它是关于名称的。它不必是相同的类型。因此,它应用于
静态方法的事实并不影响继承。
The static method in Animal
The instance method in Cat