我有一个名为Course的父类,以及两个子类PostgradCourse和UndergradCourse。 我有一个hashmap HashMap课程;我将所有postgradCourse和undergradCourse对象存储在hashmap中。
我想使用密钥从hashmap中检索undergradCourse对象。 课程课程= courses.get(courseCode); 然后我想在UndergradCourse类中调用一个方法,setUnits()方法 course.setUnits(); 但是编译器说找不到符号方法setUnit()
我很确定问题是编译器在Course类中寻找方法setUnit()而不是UndergradCourse类
我做了这个,但它不起作用 UndergradCourse course = courses.get(courseCode); 导致类型不兼容
那么如何从hashmap中检索undergradCourse对象作为undergradCourse对象而不是课程对象? 所以我可以在子类中调用一个方法
提前致谢
答案 0 :(得分:1)
地图存储两种不同类型的课程。当您从地图中检索课程时,您不知道您检索过哪种课程。
要解决这个问题,如果您使用C ++进行编程,至少有三种方法可以解决这个问题:
答案 1 :(得分:0)
假设您使用Java编程,您可以使用 instanceof 运算符来确定对象是否属于某种类型。
Course course = courses.get(courseCode)
if(course instanceof UndergradCourse)
{
UndergradCourse undergradCourse = (UndergradCourse)course;
// do you stuff with the undergrad course
}
注意:取决于对象的实际类型是打破面向对象的编程。它不被认为是好的风格。