覆盖与隐藏 Java - 困惑
我对覆盖与隐藏在Java中的区别感到困惑。任何人都可以提供更多关于它们如何不同的细节吗?我阅读了Java教程,但示例代码仍然让我感到困惑。
更清楚的是,我对覆盖的理解很好。我的问题是,我不认为隐藏有什么不同,除了一个在实例级别,而另一个在类级别。
看看 Java 教程代码:
public class Animal {
public static void testClassMethod() {
System.out.println("Class" + " method in Animal.");
}
public void testInstanceMethod() {
System.out.println("Instance " + " method in Animal.");
}
}
然后我们有一个子类:Cat
public class Cat extends Animal {
public static void testClassMethod() {
System.out.println("The class 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();
}
}
然后他们说:
此程序的输出如下所示:
动物中的类方法。
Cat 中的实例方法。
对我来说,直接从类调用类方法在类中执行方法的事实是非常明显的,没有什么特别的。然后他们调用 from a reference to ,所以再次非常明显,然后执行的方法就是 实例中的方法。testClassMethod()
Animal
Animal
testInstanceMethod()
myCat
Cat
从我所看到的,呼叫隐藏的行为就像覆盖一样,那么为什么要进行这种区分呢?如果我使用上面的类运行此代码:
Cat.testClassMethod();
我会得到:Cat中的类方法。但是,如果我从 Cat 中删除 ,那么我会得到:Animal 中的 class 方法。testClassMethod()
这让我知道,在子类中编写一个静态方法,其签名与父级中的签名相同,几乎可以完成重写。
希望我能够弄清楚我感到困惑的地方,有人可以透露一些线索。提前非常感谢!