我已经尝试通过引用'Object'类(Java中所有类的基类)访问Student类的数据成员,但是编译器会抛出编译时错误。
代码:
class Student {
String name;
int roll;
public Student(String name, int roll) {
this.name = name;
this.roll = roll;
}
}
class Main {
public static void main(String[] args) {
Object ob[] = new Object[4];
Student s = new Student("Yash", 88);
ob[0] = s;
System.out.println(s.name);
System.out.println(ob[0].name);
}
}
输出(编译时错误):
Main.java:19: error: cannot find symbol
System.out.println(ob[0].name);
^
symbol: variable name
location: class Object
1 error
compiler exit status 1
实例和指针都属于同一类
System.out.println(s.getClass());
System.out.println(ob[0].getClass());
输出:
class Student
class Student
答案 0 :(得分:1)
tldr;您仍然需要投射它:
System.out.println(((Student)ob[0]).name);
尝试ob[0].name
时会在编译之前看到它。由于尚未编译,因此编译器尚不知道其类型为Student
。但是在编译之后,运行时变量会在您调用ob[0]=s
时发生变化,这就是ob[0].getclass()
起作用的原因。
答案 1 :(得分:1)
您 可以 将Object
投射到Student
,或者您可以使用 reflection
System.out.println(Student.class.getDeclaredField("name").get(ob[0]));
或
System.out.println(((Student) ob[0]).name);
或首先将其设置为Student
的数组。
Student[] ob = new Student[4];
ob[0] = new Student("Yash", 88);
System.out.println(ob[0].name);