java抽象类,具有抽象字段和子类,无需强制转换
我创建了一个抽象基类。它包含一个对象,该对象应通过任何子类进行扩展:
public abstract class AbstractParent {
protected AbstractObject subMePlz;
// ... some fields that all subclasses need
public AbstractParent() {
this.subMePlz = createThisInYourExtendedClass();
}
public abstract AbstractObject createThisInYourExtendedClass();
}
抽象对象:
public abstract class AbstractObject {
// ... some fields/methods that all subclasses need
}
我想要的是能够在扩展类中使用扩展字段,而无需强制转换:
public class ExtendParent extends AbstractParent {
// .. some unique fields
public ExtendParent(){
super();
}
public ConcreteObject createThisInYourExtendedClass(){
return new ConcreteObject();
}
// what I want to do - no cast
public void doSomethingWithSubMePlzWithoutCastingIt() {
System.out.println(this.subMePlz);
}
// what I end up doing - gotta cast
public void doSomethingWithSubMePlzWithoutCastingIt() {
System.out.println((ConcreteObject)this.subMePlz);
}
}
需要一个比较器会改变我应该如何实现这一点吗?-我在考虑一个通用的比较器,用于它的子类可以使用的抽象对象列表
# 1 楼答案
你有两个选择:
AbstractParent
应该有一个方法abstract AbstractObject getSubMePlz()
李>subMePlz
的类型:定义AbstractParent<T>
为其subMePlz
字段设置T
李>就我个人而言,我经常发现选项1具有非常好的可扩展性——例如,您可以有另一个子类,它可以在不声明返回类型的情况下缩小
getSubMePlz()
返回类型的范围,这可能是有利的