假设我有以下抽象类和两个子类:
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 Objects或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对象。我想使用Business子类中的showDetails()方法来获取此特定值。
我可以很好地遍历地图,但我遇到了反射部分的问题。任何帮助表示赞赏!
答案 0 :(得分:1)
你不需要反思,你需要多态性。只需在对象上调用方法,Java将完成剩下的工作来调用正确的实现。
Contact contactRef = masterList.get(2);
contactRef.showDetails(); // overriden method invoked if it exists, inherited otherwise