Java 从hashmap检索后,如何指定此对象属于哪个子类?

Java 从hashmap检索后,如何指定此对象属于哪个子类?,java,hashmap,Java,Hashmap,我有一个家长班叫做“课程”,还有两个孩子班,分别是研究生班和本科生班。 我有一个hashmap hashmap课程;我将所有的研究生课程和本科生课程对象存储在hashmap中 我想使用键从hashmap中检索一个UndergroadCourse对象。 Course=courses.get(courseCode); 然后我想调用本科类中的一个方法setUnits()方法 course.setUnits(); 但是编译器说找不到符号方法setUnit() 我很确定问题是编译器在Course类而不是U

我有一个家长班叫做“课程”,还有两个孩子班,分别是研究生班和本科生班。 我有一个hashmap hashmap课程;我将所有的研究生课程和本科生课程对象存储在hashmap中

我想使用键从hashmap中检索一个UndergroadCourse对象。 Course=courses.get(courseCode); 然后我想调用本科类中的一个方法setUnits()方法 course.setUnits(); 但是编译器说找不到符号方法setUnit()

我很确定问题是编译器在Course类而不是Undergraducer类中查找方法setUnit()

我这样做了,但不起作用 本科生课程=课程.get(课程代码); 导致不兼容类型

那么,如何从hashmap中检索undergradCourse对象作为undergradCourse对象而不是course对象呢? 然后我可以在子类中调用一个方法


提前感谢

地图存储了两种不同类型的课程。从地图中检索课程时,您不知道检索的课程类型

修正此问题,如果你在C++中编程,至少有三种可供选择的方法来处理:

  • 有两张不同的地图:一张是本科课程地图,另一张是研究生课程地图(而不是一张基础课程地图)
  • 当您从单个贴图中获得一个基准面时,将对象强制转换为您知道/希望它是的子类类型(使用static_cast或dynamic_cast)
  • 在抽象基础课程中将setUnit方法声明为virtual(可能是纯virtual),并在子类中为其提供两种不同的实现:然后,因为它是在基础课程中声明的,所以可以在从映射中检索的基础课程对象上调用它

  • 假设您使用Java编程,您可以使用instanceof操作符来确定对象是否属于某种类型

    Course course = courses.get(courseCode)
    if(course instanceof UndergradCourse)
    {
        UndergradCourse undergradCourse = (UndergradCourse)course;
        // do you stuff with the undergrad course
    }
    
    注意:根据对象的实际类型,正在破坏面向对象编程。这被认为是不好的风格