包裹测试;
公共类TestMain {public static void main(String[] args) {
Animal cat = new Cat();
cat.xyz();
}
}
class Animal{
public static void xyz(){System.out.println("Inside animal");}
}
class Cat extends Animal{
public static void xyz(){System.out.println("Inside cat");}
}
输出:动物内部
[理想情况下,Cat类的xyz()应该已经执行但是没有发生。而是正在执行Animal类的xyz()。它只发生在我将这个xyz()函数设为静态时,否则就没问题了。 ] 请解释原因。
答案 0 :(得分:0)
原因是您使用static
方法,并且针对引用类型调用static
方法。它不是方法重写,因为重写适用于实例方法而不适用于静态方法。
如果你的方法是非静态的,那么将根据实例调用xyz
方法。
答案 1 :(得分:0)
答案很简单。实例仅在运行时创建,即在执行静态方法之后。因此,在调用xyz()时,变量cat仍然是动物而不是猫。如果您想要所需的结果,请执行以下操作之一:
或
public static void main(String[] args) {
Animal cat = new Cat(); // remove this line
Cat.xyz(); // you can call static methods directly using the class name.
}
public static void main(String[] args) {
Animal cat = new Cat(); // remove this line
Cat.xyz(); // you can call static methods directly using the class name.
}