我正在尝试存储不同类型的对象"在链表中。我有几个独特的"类型"继承自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
/////////////
}
答案 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设计的最佳选择。