基本java继承/数组。如何在数组中使用子类变量

基本java继承/数组。如何在数组中使用子类变量,java,arrays,inheritance,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(peopl

在这一主要方法中:

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);
    }
}
我尝试使用作业时遇到编译器错误。有人能告诉我为什么,以及应该怎么做吗?下面是我为上述方法创建的类:

个人类别:

package practice;

public class Person{
    String name;
    int age;
    public Person () {
        this.name = "undefined";
        this.age = 0;
    }
}
以及雇员类别:

package practice;

public class Employee extends Person{
    String job;
    Employee () {
        super();
        this.job = "job";
    }
}

您可以显式地强制转换对象并进行更改

System.out.println(people[1].job);
作为:


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

Person[] people = new Person[2];
编译器并不关心您是否决定将Employee对象放入其中一个数组槽中

在这样的数组中放置Person和Employee对象是非常好的,但是当您需要特定于员工的东西时,您可以执行以下操作:

if (people[i] instanceof Employee) {
 System.out.println( ( (Employee) people[i] ). job)
假设你有一辆公交车。你的想法是,坐在那辆公共汽车上的任何人都是雇员。不,这是一辆由人组成的公共汽车——你不知道坐在那里的人的情况——除非你问他们的本性

job是Employee类的成员变量,而不是Person的成员变量。那么你呢 需要显式强制转换到Employee中才能访问它


谢谢大家。这回答了我的问题。我认为,你不必采用这种方法的事实让我感到震惊。

假设你有一辆供人乘坐的公共汽车。。。这和我的有很大区别:)@davidxxx很好。所以更多的是爱好方面的事情。在我写下这些答案后,我去清理一些老农的房子,把我的配偶在一周内“准备”的垃圾袋装满了一整容器。那是工作;-)@GhostCat我当然开玩笑说:)这确实是“工作”,但通过应用OOP和设计模式,我打赌这对你来说是一个简单的形式!骗子-P
if (people[i] instanceof Employee) {
 System.out.println( ( (Employee) people[i] ). job)
((Employee) people[1]).job