超类实例数组

时间:2018-11-26 20:09:12

标签: java oop inheritance subclass superclass

我正在尝试完成一项家庭作业,但是到目前为止,我找不到解决方案,我的问题是:

我有一个超人类,该类由学生和雇员类扩展。 人有姓名,年龄,男性,然后学生有分数,雇员有薪水。 对于所有类,我都有方法为对象打印信息。 人物示例:

void showPersonInfo(){

    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");
}

对于员工(对于学生而言相同):

void showEmployeeInfo(){
    super.showPersonInfo();
    System.out.println(this.getClass().getSimpleName() + " salary per day is: " + this.daySalary);
}

然后,我有一种主要方法,其中我必须排列10个人,并用学生,人员和雇员来填充它。 迭代之后,我必须相应地调用子类的方法-showEmployeeInfo for Employee,等等。我想您已经明白了。

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

for(int index = 0; index < guys.length; index++) {
            if(guys[index].getClass() == Person.class) {
                guys[index].showPersonInfo();
                System.out.println();
            } 

我正在尝试对其他类执行相同的操作,并且设法通过getClass()找到它们,但无法调用子类方法。这有可能吗?到目前为止,我已经尝试了一些方法,但是没有任何效果。

P.S:我认为我可以使所有方法静态化,但是我认为这不是解决方案。 :)

1 个答案:

答案 0 :(得分:2)

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


您可以将showXXXInfo方法的名称更改为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,然后根据类型,将自动调用正确的方法。