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

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


还假设我有一个TreeMap,其中包含整数作为键,而Business对象或Personal对象作为值:

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

masterList.put(1, bContact1);
masterList.put(2, bContact2);
masterList.put(3, pContact1);
masterList.put(4, pContact2);


是否可以遍历TreeMap并使用反射来查看每个对象所属的子类,以便使用正确的覆盖方法?

例如,键1与作为业务对象的bContact1配对。我想将Business子类的showDetails()方法用于此特定值。

我可以很好地遍历地图,但是反射部分遇到了麻烦。任何帮助表示赞赏!

最佳答案

您不需要反射,您需要多态性。只需在对象上调用方法,Java就会做剩下的事情来调用适当的实现。

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

10-07 22:23