有人可以解释一下实例和方法隐藏的原因和好处,特别是我有哪些优势可以获得重复的超类成员?面对继承而不是为了进一步定义一个阶级并对其进行改进而不是这样吗?
答案 0 :(得分:1)
在Java方法中,当在通过继承相关的类中定义具有相同签名的静态方法时,会发生隐藏。实例方法确实不,在这种情况下会产生覆盖。
Java语言设计人员需要为其分配两种可能的语义之一 - 选择隐藏或覆盖静态方法。
我认为他们隐藏的原因是它更容易理解和实施。它还具有提高性能的巨大潜力,因为静态方法的发送可以在编译时完成。
总的来说,这不是什么大问题,因为只要您指定了定义隐藏静态方法的类名,您也可以访问隐藏方法。
答案 1 :(得分:1)
我非常不同意。因为元素只有在它们是静态时才能被隐藏,所以如果您使用通过其声明类而不是通过其子类或实例调用静态元素的良好实践,它就没有区别。
为例public class Animal {
public static void testClassMethod() {
System.out.println("The static method in Animal");
}
public void testInstanceMethod() {
System.out.println("The instance method in Animal");
}
}
public class Cat extends Animal {
public static void testClassMethod() {
System.out.println("The static method in Cat");
}
public void testInstanceMethod() {
System.out.println("The instance method in Cat");
}
public static void main(String[] args) {
Cat myCat = new Cat();
Animal myAnimal = myCat;
Animal.testClassMethod();
myAnimal.testInstanceMethod();
}
}
将输出
The static method in Animal
The instance method in Cat
正如您所看到的,即使使用另一个使用相同名称实现的静态方法,在Animal中声明的方法也不会被隐藏,除非您调用Cat.testClassMethod();
并期望得到相同的结果。
这里只是一个抽象继承思想的问题,因为静态元素并不是真正继承的,只是子类可以接受。