SubClass扩展了LinkedList <superclass> Properties

时间:2016-06-15 01:50:17

标签: java object inheritance linked-list subclass

我正在使用超类和子类。我的子类以这种方式扩展了SuperClass:

public class SubClass extends LinkedList<SuperClass>

这是否意味着我的子类包含LinkedList属性。例如,如果我从其他类创建子类的对象,我能够做类似的事情:

public class another {
    private SubClass object;
    public another(ArrayList<String> list) {
         object = new SubClass();
         SubClass localObject = object;
         for (String elements : list) {
             localObject.addAll(elements); 
         }
    }
}

我想在链表的末尾添加元素。

这会有用吗?或者我是否必须在子类中创建add(),addAll()等方法才能使其工作?

2 个答案:

答案 0 :(得分:1)

SubClass继承了LinkedList的所有方法,但由于它extends LinkedList<SuperClass>,它只能包含SuperClass类型的对象。

您的代码

for (String elements : list) {
         localObject.addAll(elements);

有两个问题。

  1. 方法addAll需要Collection<? extends T>,在您的情况下为Collection<SuperClass>,但您传递了一个String
  2. 即使您修改它以传递String的集合,它仍然无法编译。这里只接受Collection<SuperClass>
  3. 如果您将其更改为

    for (String element : list) {
             localObject.add(element);
    

    即。更改为add方法而不是addAll,这仍然是错误的,因为add()中的SubClass方法只接受SuperClass类型的对象。

答案 1 :(得分:1)

吉姆加里森是对的。但是,让我具体化。

名为Float的类扩展了名为Number的类 Integer是另一个也扩展Number的类。

如果您创建一个数字列表(又名List<Number>),那么您可以在该列表中放置浮点数,并且可以将整数放在该列表中。 以下代码将完全编译。

List<Number> numberList = new LinkedList<Number>();
numberList.add(new Float(1.5));
numberList.add(new Integer(1));

但是,您不能将马铃薯添加到数字列表中。你也不能添加一个String,或任何其他类型的不是Number(或Number的子类)的对象。以下代码将生成您引用的编译时错误。

list.add("this is a String.");

立即返回您的代码。

首先让我说,当你扩展List<SuperClass>时,这会得到另一个List<SuperClass>,其名称不同,在这种情况下为Subclass。也就是说SubClass是一个包含SuperClass对象的列表。您可以向新命名的类添加一些其他方法,以区别于List<SuperClass>,但首先它只是一个包含SuperClass实例的列表。我想你已经知道了,但我想说清楚。

名为another的方法接受一个字符串列表(List<String>)的参数。这意味着该列表的每个成员都是一个String。但是你试图从列表(字符串)中提取东西,然后将其添加到SuperClass列表中。但SuperClass列表只能接受SuperClass的实例(无论是什么)。因此,除非SuperClass恰好是String的超类(并且String只扩展Object),否则您将收到错误。

相关问题