假设我有以下抽象类和两个子类:
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