我对覆盖与隐藏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();
}
}
然后他们说:
该程序的输出如下:
Animal中的类方法。
Cat。中的实例方法。
对我来说,直接从Animal类调用类方法testClassMethod()来执行Animal类中的方法的事实是显而易见的,在此没有什么特别的。然后,他们从对myCat的引用中调用testInstanceMethod(),因此很明显,然后执行的方法就是Cat实例中的方法。
从我所见,呼叫隐藏的行为就像覆盖一样,所以为什么要区分它。如果我使用上面的类运行此代码:
Cat.testClassMethod();
我会得到: Cat中的class方法。 但是,如果我从Cat中删除testClassMethod(),则会得到: Animal中的类方法。
这说明在子类中编写与父代签名相同的静态方法几乎可以实现覆盖。
希望我能弄清楚我的困惑之处,并且有人可以阐明。首先十分感谢!
呼如林
相关分类