基本的java继承/数组.如何使用数组的子类变量

Jam*_*Jam 3 java arrays inheritance

在这个主要方法:

package practice;

public class PersonTest {

    public static void main(String[] args)
    {
        Person[] people = new Person[2];

        people[0] = new Person();
        people[1] = new Employee();

        System.out.println(people[1].job);
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用作业时遇到编译器错误.任何人都可以告诉我为什么,以及它应该怎么做?以下是我为上述方法创建的类:

Person类:

package practice;

public class Person{
    String name;
    int age;
    public Person () {
        this.name = "undefined";
        this.age = 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

和Employee类:

package practice;

public class Employee extends Person{
    String job;
    Employee () {
        super();
        this.job = "job";
    }
}
Run Code Online (Sandbox Code Playgroud)

Gho*_*ica 5

简单:因为关于该数组的编译时知识是:它是Person对象的数组.

Person[] people = new Person[2];
Run Code Online (Sandbox Code Playgroud)

编译器并不关心您是否决定将Employee对象放入其中一个数组插槽中.

将Person和Employee对象放在这样的数组中是完全正确的 - 但是当你需要Employee特定的东西时,你会做类似的事情:

if (people[i] instanceof Employee) {
 System.out.println( ( (Employee) people[i] ). job)
Run Code Online (Sandbox Code Playgroud)

假设你有一辆巴士供人们使用.你的想法是坐在那辆公共汽车上的任何人都是雇员.不 - 这是一辆的公共汽车- 你不知道坐在那里的人 - 直到你向他们询问他们的性质.