请教高手:有了多态,instanceof存在的理由是什么?

liboren 2009-07-14 06:59:44
有了多态的存在,instanceof存在的价值在什么地方?


高手指点 多谢~~~
...全文
175 11 打赏 收藏 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
多态跟 instanceof 有什么关系啊?
yanliang_xt 2009-08-31
  • 打赏
  • 举报
回复
对哦,主要就是向下传型。
比如说在图形界面中,有很多不同的组件,我们可以通过instanceOf来标识具体是谁。
老紫竹 2009-08-31
  • 打赏
  • 举报
回复
比如判断相等的equals方法,你打算怎么处理?
你只有把类转化为能操作的当前类才可以,可你怎么知道是当前兼容的类型呢?
如果不兼容,你强制转换就会报异常的。
liboren 2009-08-31
  • 打赏
  • 举报
回复
顶起来再问一次
jww_in_windows 2009-07-14
  • 打赏
  • 举报
回复
对的,主要用于向下转型。Object有个方法getClass,可以动态知道自己的类型。
爱摸鱼de老邪 2009-07-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bigbug9002 的回复:]
向上转型,是多态.
向下转型,要用instanceOf吧.比如你没有用泛型就把若干个String和若干个Integer放进一个List,
现在你要从List中把其中的String拿出来,你怎么拿?拿出来的都是Object,这时就要用到instanceof了.
[/Quote]
如2楼所说,向上转型,会隐藏对象的型别信息,在实际应用时,需要绑定到具体的型别,即向下转型。这时候,instanceOf就有了用武之地。
jhr924 2009-07-14
  • 打赏
  • 举报
回复
bangding
ouyangyh 2009-07-14
  • 打赏
  • 举报
回复
哈 ,不好意思,extends 要换成 implements,刚开始用类,现在想想,用接口更直观,也更符合编程的方式
ouyangyh 2009-07-14
  • 打赏
  • 举报
回复

public interface Base{
public void base();
}
class Child1 extends Base{
public void base(){} //实现接口方法
public void a(){} //两个子类,方法不同,也中是重写父类的方法
}
class Child2 extends Base{
public void base(){} //实现接口方法
public void b(){} //两个子类,方法不同,也中是重写父类的方法
}
public class Other{
public static void main(String[] args){

}
public static calc(Base b){
b.base(); //调用接口方法
if (b instanceof Child1){
((Child1)b).a(); //为了转型安全,使用intanceof 先判断是不是Child1的对象
}
else if (b instanceof Child2){
((Child2)b).b(); //为了转型安全,使用intanceof 先判断是不是Child2的对象
}
}
}

bigbug9002 2009-07-14
  • 打赏
  • 举报
回复
向上转型,是多态.
向下转型,要用instanceOf吧.比如你没有用泛型就把若干个String和若干个Integer放进一个List,
现在你要从List中把其中的String拿出来,你怎么拿?拿出来的都是Object,这时就要用到instanceof了.
361719298 2009-07-14
  • 打赏
  • 举报
回复
只有一个用处 多态

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧