Java 抽象类具体方法调用

Java 抽象类具体方法调用,java,Java,我有一个抽象的类叫做Animal。它有一个名为sleeping()的具体方法。然后我写了另一个类,叫做WildAnimal by Extendes Animals类。它重写抽象动物类的sleeping() 我想将抽象类具体方法调用到我的主方法中(不是WildAnimal类的重写方法)。我知道抽象类不能实例化,但可以调用抽象类具体方法()吗?如果是,如何进行 检查以下代码: 动物类(摘要): 野生动物类别: class WildAnimal extends Animal{ public

我有一个抽象的类叫做Animal。它有一个名为sleeping()的具体方法。然后我写了另一个类,叫做WildAnimal by Extendes Animals类。它重写抽象动物类的sleeping()

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

检查以下代码:

动物类(摘要):

野生动物类别:

 class WildAnimal extends Animal{

    public void sleeping(){
       System.out.println("WildAnimal Sleeping...!");
    }
  }
AbsMethodTest(测试类):


不,这是不可能的,除非您有一个不覆盖
sleeping()
Animal
实现。就客户机代码而言,它不应该“知道”谁提供了
sleeping
方法的行为。从它的角度来看,它只是将野生动物的睡眠行为称为专门化。它不能“希望”调用超类实现,因为它不应该“知道”它调用的行为是特定于子类的或从超类继承的。

您必须执行以下操作:

class WildAnimal extends Animal{

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

您必须在重写的方法中使用
super.sleeping()
。没有其他办法。你的问题源于Java糟糕的继承机制——这是一个很好的OO实践,在抽象类中只有三种类型的方法:Final、empty或abstract。这就是Java中多态性的工作原理。看一看。有关解决方案,请参阅Rohit评论。
 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 ?
   }
 }
class WildAnimal extends Animal{

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