它使用Reflection-API来决定方法是否被继承。
getMethod()
回报继承的方法
getDeclaredMathod()
回报进一步引用的所有方法
也看到Discovering Class Members
演示了API的使用示例
public class Reflect extends ArrayList {
public static void main(String[] args) {
Reflect r = new Reflect();
r.dump();
}
private void dump() {
Method[] methods = this.getClass().getMethods();
Set<String> ms = new HashSet<String>();
for (Method m : methods) {
ms.add(m.getName());
}
Method[] declMethods = this.getClass().getDeclaredMethods();
Set<String> ds = new HashSet<String>();
for (Method m : declMethods) {
ds.add(m.getName());
}
for (String name : ms) {
System.out.println(name + " is inherited =" +! ds.contains(name));
}
}
}
我不我认为这回答了它。问题是“方法摘要”部分中的一些方法实际上是从ArrayList API中的超类继承的。那么,为什么这些不在“继承自”部分呢?有人可能会说“方法摘要”方法会覆盖超类的版本,但“继承自”部分的一些方法也会覆盖超类版本。 – john 2012-01-18 23:36:51