gpt4 book ai didi

java - 将通过继承创建的对象添加到链表并实现其方法

转载 作者:行者123 更新时间:2023-11-30 07:23:42 24 4
gpt4 key购买 nike

我试图在链接列表中存储不同“类型”的对象。我有几个继承自 ProtoType 的独特“类型”类(这里只显示了一个,总共有 5 种类型)。

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

家长类(class)

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;
}
}

child 类

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
/////////////

}

最佳答案

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

示例:

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 设计的。

关于java - 将通过继承创建的对象添加到链表并实现其方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37123974/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com