需要在列表中只添加父类对象并限制子类对象

时间:2015-08-03 07:21:10

标签: java

我需要声明一个只接受父类对象的列表,它不应该允许子类对象。

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泛型中实现这一点?

2 个答案:

答案 0 :(得分:1)

您可以实现List接口并为List.add(int index, E element)方法提供自己的实现,并检查该元素是否是父类的实例,而不是实现中子类的实例。

您还可以扩展ArrayList类并覆盖向ArrayList添加元素的所有方法,并检查该元素是否为父类的实例,而不是实现中的子类的实例,并调用Super方法添加元素的过程。

答案 1 :(得分:0)

没有。你无法阻止它。我们可以将每个孩子都用作父母。每个孩子都延伸父母,显然它也是父母。