如何使类的子类返回正确的Java类型
我有一个类,其方法返回该类的对象列表:
public class Parent {
public static List<Parent> all_possible(int i) {
//...
}
//other methods
}
我试图创建一个也有这个方法的子类,除了它返回子类的列表。 对于上面的代码,我必须为子类重写它,因为类型错误:
public class Child extends Parent {
public static List<Child> all_possible(int i) {
//same thing as above except different type
}
//child methods
}
是否有可能以这样的方式编写该类,以便从该类继承的所有子类都使用正确的类型? 还是有更好的方法
另外,是否可能有类似改变类型的变量?例如:
public class Parent {
public static List<Parent> objects;
}
//...
public class Child extends Parent {
public static List<Child> objects;
}
提前谢谢
编辑: Thisstackoverflow post解释了如何使用实例方法,但没有解释如何使用静态方法或静态变量
显然这是不可能的,那么我应该使用什么替代方案呢
# 1 楼答案
如before所述,静态方法不能被重写,但子类实现隐藏了超类实现,也就是说,仅当从
Child
类的引用调用时,才会调用子类的静态方法示例代码:
测试:
输出:
# 2 楼答案
在做了一些测试之后,我做了一个半解
我把静态变量
objects
变成了HashMap<Type, ArrayList<Parent>>
然后,当我得到所有对象的列表时,我访问带有子对象类型的
objects
代码:
这不是一个完美的解决方案,因为我仍然需要在每个子类中编写一些代码,但这是我能找到的最好的解决方案