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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 樊玲 中级黑马   /  2013-3-13 00:04  /  1711 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class  Demo
{
        public static void main(String[] args)
        {
                Father f=new Son();          //f引用指向对象的真实类型是Son
                if(f instanceof Son)          //判断对象指向的真实类型是否是Son        疑问:既然Father f=new Son();能实现,说明Father
                                                      //与Son有继承关系,而且,是子父类的继承关系。***  f引用肯定是会指向Son对象的,为什么要做判断呢?
                                                                                        //而且,*** 既然f引用指向的是Son对象,为什么 f instance of Father 也成立呢? f 到底真实指向了谁??
                {
                        Son son=(Son)f
                }
        }
}
class Father
{
        void say()
        {
                System.out.println("father run");
        }
}

class Son
{
        void say()
        {
                System.out.println("son run");
        }
        void print()
        {
                System.out.println("son print ");
        }
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

8 个回复

倒序浏览
instanceof 是用来判断后面的类是不是前面的子类,起到验证的作用
回复 使用道具 举报
本帖最后由 黑马17期-闫东东 于 2013-3-13 00:46 编辑

Father f=new Son();//

              if(f instanceof Son)//instanceof 的作用是测试他左边的对象是不是右边类的类型,返回boolean类型,做判断可能是因为这代码是你写的你当然知道,到后别人来添加新功能时,就不确定了
           {                     
               Son son=(Son)f  ;//
}//多态自始至终都是子类对象在做着变化,向上转型,向下强转。
回复 使用道具 举报
Father f=new Son();
  if(f instanceof Son)
{                     
               Son son=(Son)f  ;
}判断f是不是Son类型肯定是有道理的。电脑又不知到f是不是Son类型。万一传递来的f不是Son类型就会运行时报异常。用户在使用程序是胡乱传入参数就会导致异常,所以要判断下。虽说本程序不判断也没问题,但是写上判断语句不就更加严谨嘛。要养成好的编程习惯,以后才会不痛苦。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

回复 使用道具 举报

Father f = new Son();//父类引用指向子类对象
if(f instanceof Son);      //这里比较 虽不能确定指向的真实类对象是son还是Father但是
if(f instanceof Father)        //不论是son 还是 Father都能证明两个类之间有继承关系。(我感觉可以这样理解)
Son son = (Son)f;       

/*老师说过,因为这代码是自己写的,明知道它到底指向谁,可以省略,但以后开发中看别人代码
                                     改进别人代码 如果类太多当然需要咱自己去验证啦
                                     你要是纠结到底指向谁就用
                                f.getClass()==Son.class比较吧,会确定到底指向哪个对象。*/

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
问题一:关于为什么要判断,楼上的各位说的都挺有道理的,你可以借鉴一下。不过,我想说的是不要太过纠结于此,我们现在还太缺乏编程经验,就算别人告诉我们这样写是为了严谨、安全、、、,还是不能深刻的理解,以后遇到真实的案例自然就明白了,现在知道有那回事就行了,毕竟还有很多更重要的东西要学。
问题二:f引用指向的是Son对象,这个对象同时也是一个Father对象。这就是继承的向上转型。给你举个简单的例子:你是一个中国人,但同时也是一个亚洲人,那你到底是中国人还是亚洲人?其实说你是中国人更准确点,说你是亚洲人也没错。这和继承的道理是一样的。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

回复 使用道具 举报
l楼上几位说的都非常明白 受教了
回复 使用道具 举报
猫腻 高级黑马 2013-3-13 09:39:45
8#
请及时结贴,否则扣除技术分。
回复 使用道具 举报
樊玲 中级黑马 2013-3-13 10:57:56
9#
猫腻 发表于 2013-3-13 09:39
请及时结贴,否则扣除技术分。

:'(          弱弱地问一下,在哪儿结贴,,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马