ラーフル数量:
私は、コンパイラがコンパイル時エラーをスローし、「オブジェクトのクラスの参照を経由して、クラスの学生のデータメンバにアクセスしてみました(Javaですべてのクラスの基底クラスである)が、しています。
コード:
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
RIGOサルミエント:
tldr; あなたはまだそれをキャストする必要があります:
System.out.println(((Student)ob[0]).name);
あなたがしようとしていたときob[0].name
、あなたはコンパイル時前にそれを見ていました。それがコンパイルされていないので、コンパイラは型であることをまだ知りませんStudent
。あなたが呼ぶときしかし、それをコンパイルした後、実行時の変数は変更ob[0]=s
理由である、ob[0].getclass()
作品。