Java 使用类型为'的引用访问类的数据成员;对象';
我曾尝试通过引用“Object”类(Java中所有类的基类)来访问一个类Student的数据成员,但是编译器抛出了一个编译时错误 代码:Java 使用类型为'的引用访问类的数据成员;对象';,java,Java,我曾尝试通过引用“Object”类(Java中所有类的基类)来访问一个类Student的数据成员,但是编译器抛出了一个编译时错误 代码: 班级学生{ 字符串名; 整流罩; 公立学生(字符串名称,整数卷){ this.name=名称; this.roll=roll; } } 班长{ 公共静态void main(字符串[]args){ 对象ob[]=新对象[4]; 学生s=新生(“Yash”,88); ob[0]=s; System.out.println(s.name); System.out.p
班级学生{
字符串名;
整流罩;
公立学生(字符串名称,整数卷){
this.name=名称;
this.roll=roll;
}
}
班长{
公共静态void main(字符串[]args){
对象ob[]=新对象[4];
学生s=新生(“Yash”,88);
ob[0]=s;
System.out.println(s.name);
System.out.println(ob[0].name);
}
}
输出(编译时错误):
Main.java:19:错误:找不到符号
System.out.println(ob[0].name);
^
符号:变量名
位置:类对象
1错误
编译器退出状态1
实例和指针都属于同一类:
System.out.println(s.getClass());
System.out.println(ob[0].getClass());
输出:
班级学生
班级学生
tldr;你仍然需要投下它:
System.out.println(((Student)ob[0]).name);
当您尝试ob[0]。name
时,您在编译时之前看到了它。因为它还没有被编译,编译器还不知道它是Student
类型。但是编译后,当调用ob[0]=s时,运行时变量会发生变化,这就是为什么ob[0].getclass()
可以工作的原因。您可以将对象
强制转换为学生
,或者可以使用反射
或
或者首先让它成为学生的数组
Student[] ob = new Student[4];
ob[0] = new Student("Yash", 88);
System.out.println(ob[0].name);
这是编译时错误,不是运行时错误。不要调用引用指针。称他们为推荐人,谢谢!你提供的解释正是我所寻求的。它帮助我更广泛、更好地理解这个概念。谢谢
System.out.println(((Student) ob[0]).name);
Student[] ob = new Student[4];
ob[0] = new Student("Yash", 88);
System.out.println(ob[0].name);