我需要声明一个只接受父类对象的列表,它不应该允许子类对象。
parent class:
public class ParentClass {
private String parentAttr;
public String getParentAttr() {
return parentAttr;
}
public void setParentAttr(String parentAttr) {
this.parentAttr = parentAttr;
}
}
Sub class:
public class SubClass1 extends ParentClass {
private String attr1;
public String getAttr1() {
return attr1;
}
public void setAttr1(String attr1) {
this.attr1 = attr1;
}
}
Main class:
public class MainClass {
public static void main(String[] args) {
ParentClass parentClass=new ParentClass();
SubClass1 subClass1 = new SubClass1();
List<ParentClass> list=new ArrayList<ParentClass>(); // modify this declaration such that it should accept only the parent class objs
list.add(parentClass);
list.add(subClass1); // this should not happen. only parent class objects should be added in the list
}
}
我也试过使用泛型。但它不起作用。有没有办法在java泛型中实现这一点?
答案 0 :(得分:1)
您可以实现List接口并为List.add(int index, E element)方法提供自己的实现,并检查该元素是否是父类的实例,而不是实现中子类的实例。
您还可以扩展ArrayList类并覆盖向ArrayList添加元素的所有方法,并检查该元素是否为父类的实例,而不是实现中的子类的实例,并调用Super方法添加元素的过程。
答案 1 :(得分:0)
没有。你无法阻止它。我们可以将每个孩子都用作父母。每个孩子都延伸父母,显然它也是父母。