【发布时间】:2015-11-21 15:51:36
【问题描述】:
在 Fruit 构造函数中调用 fruitName 方法,实际上是将调用委托给 Apple 子类的方法!
public class CallingParentMethodInInheritanceHierarchy {
abstract class Fruit {
String fruitName;
public Fruit(String fruitName) {
this.fruitName = fruitName;
/*
* o/p - Inside constructor - Child: Fruit name is - Apple
*/
System.out.println("Inside constructor - " + fruitName()); // doubt?
}
public String fruitName() {
return "Parent: Fruit name is - " + fruitName;
}
public abstract String type();
}
class Apple extends Fruit {
public Apple() {
super("Apple");
}
public String fruitName() {
/*
* To call the super class method, only way is -
*
* System.out.println(super.fruitName());
*/
return "Child: Fruit name is - " + fruitName;
}
@Override
public String type() {
return "AllSeasonsFruit";
}
}
public static void main(String[] args) {
Fruit fruit = new CallingParentMethodInInheritanceHierarchy().new Apple();
/*
* o/p - Child: Fruit name is - Apple
*/
System.out.println(fruit.fruitName());
}
}
这背后的主要尝试是,我试图调用父方法,而不使用子方法中的 super.fruitName() 调用这种简单的方式。
请帮助我@line #12
【问题讨论】:
-
这不是微不足道的;这是唯一的方法。父母和孩子之间的行为没有区别 - 您正在打印名称。为什么要覆盖它?
-
构造函数中调用的方法应该是最终的。
-
@duffymo - 我只是在检查,稍后我可以添加真正的功能:-)
-
对不起,你要么了解多态,要么不了解。
标签: java inheritance constructor