タイプ「オブジェクト」の参照を持つクラスのアクセスデータメンバ

ラーフル数量:

私は、コンパイラがコンパイル時エラーをスローし、「オブジェクトのクラスの参照を経由して、クラスの学生のデータメンバにアクセスしてみました(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()作品。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=336000&siteId=1