【发布时间】:2017-12-17 06:56:57
【问题描述】:
长话短说,我不知道为什么这段代码不起作用。
import java.util.*;
class sup{
int a;
sup(){
a = 1;
}
}
class subB extends sup{
int b;
subB(){
b = 2;
}
}
class subC extends sup{
int c;
subC(){
c = 3;
}
}
public class runMain{
public static void main(String args[]){
List<Object> classes = new ArrayList<Object>();
classes.add(new sup());
classes.add(new subB());
classes.add(new subC());
System.out.println(classes.get(0).a); //should print 1
System.out.println(classes.get(1).b); //should print 2
System.out.println(classes.get(2).c); //should print 3
}
}
如评论中所述,我希望最后 3 行打印不同类中 a、b 和 c 的值。当而不是例如
System.out.println(classes.get(0));
它打印sup@6d06d69c,我认为这只是内存位置的类名“@”,因此程序中的所有其他内容似乎都按预期工作。
【问题讨论】:
-
我知道为什么它打印 sup@6d06d69c,正如我在文中所说的那样,这不是我的问题。我在问如何打印/访问属于该类的特定变量。
-
我的错。这是您实际要问的问题:stackoverflow.com/questions/4512312/… 您需要将值转换为其相应的子类。
-
如果对象没有存储在 ArrayList 中,这可以解决问题,我之前尝试过并且工作正常。只是在 ArrayList 中引用对象的变量似乎并不直观,至少对我而言,以我放入原始代码块的形式。
-
存储位置无关紧要。您可以转换
get返回的内容,就像转换变量一样。((sup)classes.get(0)).a。或者只是先将它的返回值分配给一个变量并进行转换。 -
啊,我的错,我阅读了解决方案的错误部分。我想因为我声明了 Object 类型的 ArrayList,所以需要在访问之前对其进行强制转换。有没有类似的方法在ArrayList中的这个Object内设置变量和运行方法?
标签: java object arraylist subclass