调用继承的类函数但仍然执行父类的函数

时间:2014-12-08 05:26:03

标签: java oop inheritance override

包裹测试;

公共类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()函数设为静态时,否则就没问题了。 ] 请解释原因。

2 个答案:

答案 0 :(得分:0)

原因是您使用static方法,并且针对引用类型调用static方法。它不是方法重写,因为重写适用于实例方法而不适用于静态方法。

如果你的方法是非静态的,那么将根据实例调用xyz方法。

答案 1 :(得分:0)

答案很简单。实例仅在运行时创建,即在执行静态方法之后。因此,在调用xyz()时,变量cat仍然是动物而不是猫。如果您想要所需的结果,请执行以下操作之一:

  1. 从方法签名中删除static关键字。
    1. 调用方法xyz(),如下所示
    2. 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. }