抽象类具体方法调用

时间:2014-03-09 15:04:06

标签: java

我有一个名为Animal的抽象类。它有一个叫做sleep()的具体方法。然后我通过extends类编写了另一个名为WildAnimal的类。这会覆盖抽象Animal类的sleep()

我想在我的main方法中调用抽象类具体方法(不重写WildAnimal类的方法)。我知道Abstract类不能实例化,但可以调用抽象类具体方法()吗?如果是,怎么样?

检查以下代码:

动物类(摘要):

 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 ?
   }
 }

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

你必须这样做:

class WildAnimal extends Animal{

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