黑马程序员技术交流社区

标题: 一个可以升华所学知识,拓展思维的需求,挑战一下,你能实... [打印本页]

作者: 张利强    时间: 2015-2-25 23:11
标题: 一个可以升华所学知识,拓展思维的需求,挑战一下,你能实...
一个可以升华所学知识,拓展思维的需求,挑战一下,看看你能实现这个需求吗?
封装一个方法,传递任意两个对象进去,判断这两个对象对应的类是否有继承关系,并判断出哪个是父类对象,哪个是子类对象?

作者: fantacyleo    时间: 2015-2-26 01:05
Class类的isAssignableFrom方法就可以实现这个需求
作者: 张利强    时间: 2015-2-26 01:19
fantacyleo 发表于 2015-2-26 01:05
Class类的isAssignableFrom方法就可以实现这个需求

{:2_30:}我都不知道有这个方法,见笑了。。。也可以尝试自己模拟下Class的这个方法
作者: fantacyleo    时间: 2015-2-26 01:32
张利强 发表于 2015-2-26 01:19
我都不知道有这个方法,见笑了。。。也可以尝试自己模拟下Class的这个方法 ...

还有一个isInstance方法也是类似的。自己实现的话,我还真没啥简洁的思路,JDK源码中isInstance和isAssignableFrom都是native方法,看不到源码。不知道你可否分享一下思路?
作者: sofeel    时间: 2015-2-26 01:47
本帖最后由 sofeel 于 2015-2-26 11:02 编辑

用反射可以。
1,先排除8大基本类型、数组、接口(在Class中都有),剩下的都是类;
2,找出各自的方法比较下:
分别遍历各自的方法,判断方法有没有共性,判断有没有包含与被包涵的关系。



作者: 张利强    时间: 2015-3-13 22:45
sofeel 发表于 2015-2-26 01:47
用反射可以。
1,先排除8大基本类型、数组、接口(在Class中都有),剩下的都是类;
2,找出各自的方法比较 ...

思路不错,但是这个不能说明两个对象之间是否有继承关系。比如定义一个Person类和Animal类,都有相同的name,age属性,setter(),getter()方法,他们的方法列表都是一样的,但是他们之间并没有继承关系




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2