我正在尝试完成一项家庭作业,但是到目前为止,我找不到解决方案,我的问题是:
我有一个超人类,该类由学生和雇员类扩展。 人有姓名,年龄,男性,然后学生有分数,雇员有薪水。 对于所有类,我都有方法为对象打印信息。 人物示例:
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:我认为我可以使所有方法静态化,但是我认为这不是解决方案。 :)
答案 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
,然后根据类型,将自动调用正确的方法。