Java 如何遍历树映射并使用反射来获取子类名称?

Java 如何遍历树映射并使用反射来获取子类名称?,java,reflection,subclass,treemap,Java,Reflection,Subclass,Treemap,假设我有以下抽象类和两个子类: public abstract class Contact { private String name; public void showDetails() { System.out.println(name); } } public class Personal extends Contact { private String relationship; // @override public

假设我有以下抽象类和两个子类:

public abstract class Contact {
    private String name;

    public void showDetails() {
        System.out.println(name);
    }
}

public class Personal extends Contact {
    private String relationship;

    // @override
    public void showDetails() {
        System.out.println(name);
        System.out.println(relationship);
    }
}

public class Business extends Contact {
    private String company;

    // @override
    public void showDetails() {
        System.out.println(name);
        System.out.println(company);
    }
}
还假设我有一个树形图,其中包含整数作为键,业务对象或个人对象作为值:

Map<Integer, Contact> masterList = new TreeMap<Integer, Contact>();

masterList.put(1, bContact1);
masterList.put(2, bContact2);
masterList.put(3, pContact1);
masterList.put(4, pContact2);
Map masterList=newtreemap();
主列表。put(1,b联系人1);
主列表。put(2,b联系人2);
主列表。put(3,pContact1);
主列表。put(4,pContact2);
为了使用正确的覆盖方法,是否可以迭代树映射并使用反射来查看每个对象所属的子类

例如,键1与业务对象bContact1配对。我想使用业务子类中的showDetails()方法来实现这个特定的值


我可以很好地遍历贴图,但是反射部分有问题。感谢您的帮助

你不需要反思,你需要多态性。只需调用对象上的方法,Java将执行其余操作来调用适当的实现

Contact contactRef = masterList.get(2);
contactRef.showDetails(); // overriden method invoked if it exists, inherited otherwise

非常感谢。我有把事情复杂化的习惯。编辑:即使Contact是一个抽象类,我也可以这样做吗?@NojoRu是的。你应该仔细阅读遗传和多态性。这是它们的特性之一。