我有一个叫做Animal的抽象类。它有一个称为sleeping()的具体方法。然后,我通过extended Animals类编写了另一个名为WildAnimal的类。覆盖了抽象动物类的sleeping()

我想将抽象类的具体方法调用到我的主方法中(WildAnimal类的未重写方法)。我知道不能实例化Abstract类,但是可以调用abstract类的具体method()吗?如果是,如何?

检查以下代码:

动物类(抽象):

 abstract class Animal {

   public void sleeping(){
    System.out.println("Animal Sleeping...!");
   }
 }


WildAnimal类:

 class WildAnimal extends Animal{

    public void sleeping(){
       System.out.println("WildAnimal Sleeping...!");
    }
  }


AbsMethodTest(测试类):

 public class AbsMethodTest {

   public static void main(String[] args) {
    Animal ani = new WildAnimal();  // This will print "WildAnimal Sleeping...!"
    ani.sleeping();  // But i want to print "Animal Sleeping...!" is it possible ?
   }
 }

最佳答案

不,这是不可能的,除非您具有不覆盖Animalsleeping()实现。就客户端代码而言,不应“知道”谁提供了sleeping方法的行为。从它的角度来看,它只是调用sleeping专门化的WildAnimal行为。它不能“希望”要调用的超类实现,因为它根本不应该“知道”它所调用的行为是特定于子类或从超类继承的。

10-07 16:21