Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用类型为'的引用访问类的数据成员;对象';_Java - Fatal编程技术网

Java 使用类型为'的引用访问类的数据成员;对象';

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

我曾尝试通过引用“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.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);