Java 超类实例数组

Java 超类实例数组,java,oop,inheritance,subclass,superclass,Java,Oop,Inheritance,Subclass,Superclass,我有一个家庭作业,我正在努力完成,但到目前为止我还没有找到解决方案,我的问题是: 我有一个超类的人,由学生和员工扩展。 Person有name、age、male字段,然后Student有score字段,Employee有salary字段。 对于所有类,我都有方法打印对象的信息。 个人示例: void showPersonInfo(){ 对于员工(学生也一样): 然后我有一个主要的方法,我必须制作一个10人的数组,并用学生、个人和员工填充它。 迭代之后,我必须相应地调用子类的方法-showEmpl

我有一个家庭作业,我正在努力完成,但到目前为止我还没有找到解决方案,我的问题是:

我有一个超类的人,由学生和员工扩展。 Person有name、age、male字段,然后Student有score字段,Employee有salary字段。 对于所有类,我都有方法打印对象的信息。 个人示例:

void showPersonInfo(){

对于员工(学生也一样):

然后我有一个主要的方法,我必须制作一个10人的数组,并用学生、个人和员工填充它。 迭代之后,我必须相应地调用子类的方法-showEmployeeInfo for Employee等等。我想你已经明白了

到目前为止,我已经做到了:

for(int index = 0; index < guys.length; index++) {
            if(guys[index].getClass() == Person.class) {
                guys[index].showPersonInfo();
                System.out.println();
            } 
for(int index=0;index
我正在尝试对其他类执行相同的操作,我使用getClass()找到了它们,但我无法调用子类方法。这可能吗?我尝试了一些方法,但没有任何效果。有什么想法吗


附言:我认为我可以使所有的方法都是静态的,但我认为这不应该是解决方案。

免责声明:这不一定是老师/讲师期望的答案


您可以将
showXXXInfo
方法的名称更改为just
showInfo
,并使子类中的方法覆盖超类中的方法:

// in Person
void showInfo() {

    System.out.println( this.getClass().getSimpleName() + " name: " + this.name);
    System.out.println(  this.getClass().getSimpleName() +" age : " + this.age);
    System.out.println(isMale ?  this.getClass().getSimpleName() + " is male" : this.getClass().getSimpleName() + " is female");

}

// in Employee
@Override
void showInfo(){
    super.showInfo();
    System.out.println(this.getClass().getSimpleName() + " salary per day is: " + this.daySalary);
}

现在,您可以在数组的每个元素上调用
showInfo
,并根据类型自动调用正确的方法。

免责声明:这不一定是您的老师/讲师期望的答案


您可以将
showXXXInfo
方法的名称更改为just
showInfo
,并使子类中的方法覆盖超类中的方法:

// in Person
void showInfo() {

    System.out.println( this.getClass().getSimpleName() + " name: " + this.name);
    System.out.println(  this.getClass().getSimpleName() +" age : " + this.age);
    System.out.println(isMale ?  this.getClass().getSimpleName() + " is male" : this.getClass().getSimpleName() + " is female");

}

// in Employee
@Override
void showInfo(){
    super.showInfo();
    System.out.println(this.getClass().getSimpleName() + " salary per day is: " + this.daySalary);
}

现在,您可以对数组的每个元素调用
showInfo
,并根据类型自动调用正确的方法。

什么是
guys
定义的?如果它是
Person[]
,那么您可以执行
If(guys[index]instanceof Employee){((Employee)guys[index])。showEmployeeInfo();}
效果很好!非常感谢,到目前为止,我们还没有学会“instanceof”的用法,但现在是开始的好时机!再次感谢!什么是
的定义?如果是
人[]
,那么你可以做一些类似
如果(员工[索引]instanceof Employee){((员工)人[索引])。showEmployeeInfo();}
效果很好!非常感谢,到目前为止我们还没有学会“instanceof”的用法但这是一个开始的好时机!再次感谢!我想到了…如果没有其他解决方案,我可能会这样做,但正如您的免责声明所说,我相信这不是答案,因为在任务中,据说方法应该有这些名称…:)谢谢tho!:@IvanMichev请注意,这是您的老师应该针对的解决方案每个人,而不是级联的
实例。我想到了…如果没有其他解决方案,我可能会这样做,但正如你的免责声明所说,我相信这不是答案,因为在任务中,据说方法应该有这些名称…:)谢谢tho!:)@IvanMichev注意,这是你的老师应该瞄准的解决方案ing是教你的,而不是级联的
实例。
// in Person
void showInfo() {

    System.out.println( this.getClass().getSimpleName() + " name: " + this.name);
    System.out.println(  this.getClass().getSimpleName() +" age : " + this.age);
    System.out.println(isMale ?  this.getClass().getSimpleName() + " is male" : this.getClass().getSimpleName() + " is female");

}

// in Employee
@Override
void showInfo(){
    super.showInfo();
    System.out.println(this.getClass().getSimpleName() + " salary per day is: " + this.daySalary);
}