A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杜佳瑞 中级黑马   /  2012-8-4 14:59  /  1365 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

if(!(obj instanceof Person))//1
       throw new ClassCastException();
Person p=(Person)obj;//2
instanceof的作用不就是判断左边的对象是不是右边类的实例?
那为什么还要有2这句强转呢,既然不一样就会抛出异常,那剩下的不就是一样的吗

6 个回复

正序浏览
问题已解决
回复 使用道具 举报
这其实也算是java语言的规定吧,符合一般人类思维。
打个比方吧,比如一个军队在A这个地方现在想要到B这个地方,
那么军队会先派出个侦察兵侦查侦查能不能到B地方(也即 做下 这个判断 obj instanceof Person)
如果到不了 B地 那么整个军队就不去了;如果能到B地 那么这个军队就会去(也就相当于程序的 Person p=(Person)obj)
回复 使用道具 举报
张雪磊 发表于 2012-8-4 15:26
把代码写全就知道怎么回事了
class Demo extends Object
{

obj 这个对象本来就是Demo这个类的对象啊,只是它使用了父类的引用。
难道这句Demo d = (Demo)obj;就是为了将引用强制转型吗?又是为了什么?这很迷糊,求解

回复 使用道具 举报
把代码写全就知道怎么回事了
class Demo extends Object
{
        private int num;
        Demo(int num)
        {
                this.num = num;
        }
       
        public boolean equals(Object obj)//Object obj = new Demo();
        {

                if(!(obj instanceof Demo))
                        return false;
                Demo d = (Demo)obj;

                return this.num == d.num;
        }
       
        /*
        public boolean compare(Demo d)
        {
                return this.num==d.num;
        }
        */
        public String toString()
        {
                return "demo:"+num;
        }
}
instanceof的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。也可以用在继承中的子类的实例是否为父类的实现。也就是用在多态上。上面那个例子就是这样。他用父类的参数来接受子类的对象,相当于红色部分。

1,多态的体现
        父类的引用指向了自己的子类对象。
        父类的引用也可以接收自己的子类对象。
2,多态的前提
        必须是类与类之间有关系。要么继承,要么实现。
        通常还有一个前提:存在覆盖。

3,多态的好处
        多态的出现大大的提高程序的扩展性。

4,多态的弊端:
        虽然提高了扩展性,但是只能使用父类的引用访问父类中的成员。

也就是说,你把一个Demo类或者说person类传进去,实际上是把person类向上提升成了Object类,但我们需要比较的或者要操作的是你真正传进来的对象,这时候需要把这个已经向上转型成Object的类重新向下转型。



回复 使用道具 举报
如果条件满足,则obj是Person的类型,如果不强转,Preson类中的特有方法,obj是不能调用的,所以如果不需要用到Person中的特有方法,可以不用强转,但是想要使用Person中的特有方法,不强转的话Object中没有该方法,编译会失败.
回复 使用道具 举报
instanceof意思是obj属于Person这个对象吗?不属于就抛异常,
属于就将obj强转为person对象,这里强转是类型的提升,
比如动物和猫:猫属于动物,动物中有猫和其他动物所共有的功能和行为,猫只要继承了动物就会拥有动物里的功能,
如果你传入一个动物,要使用猫的特有功能,就要想把动物强转为猫才能使用。
instanceof的意思判断是否为某一个类。是属于 与 不属于  的关系!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马