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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 魏腾飞 黑马帝   /  2012-1-16 10:21  /  3199 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 魏腾飞 于 2012-1-19 10:04 编辑

多态中向上转型和向下转型的详解?尤指非静态成员方法的调用,详解···

评分

参与人数 1技术分 +1 收起 理由
祁焱 + 1

查看全部评分

4 个回复

倒序浏览
在多态中,向上转型和向下转型有很多的应用。
例如: 1:  Animal c = new Cat();   //类型提升,向上转型
            在编译时:参阅引用型变量所属类中是否有调用的方法。如果有。编译通过,没有编译失败
                    在运行时:参阅对象所属类中是否有调用方法。
            简单一句话:成员函数在多态时,编译看左边,运行看右边。
       2:  如果想要调用猫的特有方法,如何操作?
            强制将父类的引用,转成子类类型。向下转型
            Cat c = (Cat)a;
                   c.catchMouse();
           3:     在多态中,调用子类函数,子类方法必须覆盖父类中的方法,如果调用子类特有的方法,就必须向下转型了。
            这样非静态的方法可直接调用。
            在多态中,成员变量的特点:
            无论编译和运行,都参考左边(引用型变量所属的类,)

            在多态中,静态成员函数的特点:
            无论编译和运行,都参考做左边。

         

评分

参与人数 1技术分 +1 收起 理由
祁焱 + 1 赞一个!

查看全部评分

回复 使用道具 举报
据我自己的理解:向上转型 就是说 子类对象可以直接转为父类对象,就像变量一样,范围小的可以直接转为范围大的(父类对象 =  子类对象),这就是向上转型。而范围大的转为范围小的就要报错,这就必须要用到强制类型 :子类对象 = (子类)父类对象,这就是向下转型。
非静态成员调用:实例化一个对象,对象.方法名() 就OK了,当然也可以采用匿名的方法:new 对象.方法名()
仅供参考。

评分

参与人数 1技术分 +1 收起 理由
祁焱 + 1 赞一个!

查看全部评分

回复 使用道具 举报
在多态中,向上转型和向下转型有很多的应用。
例如: 1:  Animal c = new Cat();   //类型提升,向上转型
            在编译时:参阅引用型变量所属类中是否有调用的方法。如果有。编译通过,没有编译失败
                    在运行时:参阅对象所属类中是否有调用方法。
            简单一句话:成员函数在多态时,编译看左边,运行看右边。
       2:  如果想要调用猫的特有方法,如何操作?
            强制将父类的引用,转成子类类型。向下转型
            Cat c = (Cat)a;
                   c.catchMouse();
           3:     在多态中,调用子类函数,子类方法必须覆盖父类中的方法,如果调用子类特有的方法,就必须向下转型了。
            这样非静态的方法可直接调用。
            在多态中,成员变量的特点:
            无论编译和运行,都参考左边(引用型变量所属的类,)

            在多态中,静态成员函数的特点:
            无论编译和运行,都参考做左边。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
你可以把父类的引用给子类对象,向上转换,只有父类的引用才可以有向下转化。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马