【发布时间】:2014-03-09 15:04:05
【问题描述】:
我有一个名为 Animal 的抽象类。它有一个名为 sleep() 的具体方法。然后我通过扩展动物类编写了另一个名为 WildAnimal 的类。它覆盖了抽象 Animal 类的 sleep()
我想在我的主要方法中调用抽象类的具体方法(不是 WildAnimal 类的重写方法)。我知道抽象类不能被实例化,但是可以调用抽象类具体方法()吗?如果是,如何?
检查以下代码:
动物类(摘要):
abstract class Animal {
public void sleeping(){
System.out.println("Animal Sleeping...!");
}
}
野生动物类:
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 ?
}
}
【问题讨论】:
-
你必须在被覆盖的方法中使用
super.sleeping()。没有别的办法。 -
您的问题是 Java 未充分阐述的继承机制的结果 - 这是一个很好的 OO 实践,抽象类中只有三种类型的方法:Final、empty 或 abstract。
-
Java 中的多态性就是这样工作的。看看late binding。有关解决方案,请查看 Rohit 评论。
标签: java