[英]How do I enforce a child class from an abstract class to implement a static method
[英]How do I call abstract class' child class method when using an array of child objects?
我有一个抽象类(父类)及其子类。
总的来说,我创建了一个数组。 看起来像这样:
AbstractClass[] array = {childClassObj1, childClassObj2};
printInfo(array);
public static void printInfo (AbstractClass[] array){
System.out.printf("%s", childClassObj1.getInfo());
}
编译器错误发生在“ childClassObj1.getInfo()”中。 如果将其更改为“ array [0] .getInfo()”,则将无法完成,因为方法getInfo()在子类中,而不在抽象类中。 如何调用抽象类的子类方法?
将abstract
方法getInfo()
添加到父类。
public abstract class AbstractClass {
public abstract String getInfo();
}
然后,在子类中重写此方法:
public class ChildClass extends AbstractClass {
@Override
public String getInfo() {
return "Info string";
}
}
然后,遍历数组并在每个实例上调用该方法:
public static void printInfo (AbstractClass[] array){
for(AbstractClass child : array) {
System.out.printf("%s%n", child.getInfo());
}
}
编辑:如果您不能将方法添加到您的抽象类,则需要将循环中的每个元素强制转换为子类的类型:
public static void printInfo (AbstractClass[] array){
for(AbstractClass child : array) {
System.out.printf("%s%n", ((ChildClass)child).getInfo());
}
}
不过要小心。 只有在确定只有ChildClass
实例在数组中时,这才起作用。 如果存在另一个子类的实例,则将收到ClassCastException
。
同样这样做也违反了建立抽象类的目的,因为如果您只需要ChildClass
的功能,则可以轻松地使用ChildClass
数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.