将使用继承创建的对象添加到链接列表并实现其方法

时间:2016-05-09 19:31:58

标签: java

我正在尝试存储不同类型的对象"在链表中。我有几个独特的"类型"继承自ProtoType的类(这里只显示一个,共有5种类型)。

当我创建一个新对象时,我可以使用" type1.someMethods"来访问其中的所有方法。我不知道的是,如何通过列表进行迭代并获得每种不同类型的方法"根据他们在列表中的位置。我以为我可以使用" typeList.get(int index).someMethods()。我只能使用与LinkedList相关联的方法。

父类

public class ProtoType {

private int ID;
private int x;
private String type;
private int randomNumber;

public ProtoType(int ID, int x, String type ) {

   this.ID = ID;
   this.x = x;
   this.type = type;
   this.randomNumber = randomNumber;
}


 public int getID() {
    return ID;
}


public  int getX() {
   return x;
}

public void randomNumberGenerator(int max, int min) {
   Random r = new Random();
   randomNumber = r.nextInt(max - min + 1) + 1;

}
public int getRandomNum() {
   return randomNumber;
}
}

儿童班

public class Type1 extends ProtoType {

public Type1(int ID, int x, String type) {
    super(ID, x, type);

}
public void preformAction(){
    System.out.println(getRandomNum());
    switch (getRandomNum()){

    case 1:
    case 2:
        //Some action
        break;
    case 3: 
        //some action
        break;
    case 4:
        //some action
        break;
        }
    }
}

主要课程

import java.util.LinkedList;

public class TestMAin {

public static   void main(String[] args) {

   LinkedList typeList = new LinkedList();

   Type1 t1 = new Type1(1, 12, "type1");
      typeList.add(0, t1);
   Type1 t2 = new Type1(2, 13, "type1");
      typeList.add(1, t2);

   }
//////////////
// the issue
//iterate thru the array get the type 
//implement the methods of that type
/////////////

}

1 个答案:

答案 0 :(得分:1)

根据一件事,我有2条建议。您的继承类是否使用方法覆盖?

示例:

public class ParentClass {
    public void method() {}
}

public class ChildA extends ParentClass {
    @Override
    public void method() {}
}

public class ChildB extends ParentClass {
    @Override
    public void method() {}
}

public class Main {
    public static void main(String[] args) {
        ArrayList<ParentClass> list = new ArrayList<>();
        list.add(new ChildA());
        list.add(new ChildB());

        for (int i = 0; i < list.size(); i++) {
            list.get(i).method(); //Will class the appropriate sub-classes implementation of method().
        }
    }
}

如果您不希望使用重写方法,则instanceof运算符可能就是您正在寻找的内容。

public class Main {
    public static void main(String[] args) {
        ArrayList<ParentClass> list = new ArrayList<>();
        list.add(new ChildA());
        list.add(new ChildB());

        for (int i = 0; i < list.size(); i++) {
            ParentClass obj = list.get(i);

            if (obj instanceof ChildA) {
                obj.childAMethod();
            }
            else if (obj instanceof ChildB) {
                obj.childBMethod();
            }
        }
    }
}

如果您发现自己依赖于instanceof运算符,则可能需要查看您的程序结构,因为它不被认为是OOP设计的最佳选择。