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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 秦岩 黑马帝   /  2012-4-3 22:32  /  5437 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 lyqinyan 于 2012-4-4 15:46 编辑

什么情况下会把子类类型强转为父类类型?



好吧,自己回答了,查了很多资料,问了朋友才得到答案:
                当一个子类对象可以匹配多个重载的方法, 而多个方法中的形参是这个子类实现的不同的父类类型.
                这时调用不明确, 因为子类对象可以传入多个方法, 需要强转为父类类型, 才能明确调用哪个方法.

11 个回复

倒序浏览
子类对象可以直接当成父类类型来用。。。不需要强转吧.你强不强转都行。。
class Test1 {
        public static void main(String[] args) {
                B b = new B();
                A a = b;
                A a1 = (A)b;
       
        }
       
         
}
class A {}
class B extends A {}
回复 使用道具 举报
  那就要用到多太的向上转型
转型就是扩展性,按照父类型操作,父类可以指向所有子类对象,向上转型局限性就是多态的弊端
回复 使用道具 举报
上面一楼已经给出代码,我完全同意。我想对这位同学说的是,子类类型强转父类类型完全没有意义。
因为我们把父类对象强转成子类类型,时因为子类有的特有方法父类不能用。而以大摇大摆的用父类所有的方法。并且
我们在用到多态时,父类引用指向子类对象,这时子类对象已经自然转换成父类对象了,再转一次不是浪费力气吗?
回复 使用道具 举报
如果父类要转子类才需要强制转换,子类转父类是会自动转的!
回复 使用道具 举报
父类引用建立子类对象,这样的方式只能访问父类中的成员,如果要访问子类中特有成员,就必须向下转型,才能访问,因为这是特有成员, 是父类不具有的。
回复 使用道具 举报
子类对象用父类类型接收,这是多态形式。
class sup{
        public void show(){}
}
class sub extends sup{
        public void show1(){}
}
class Demo{
        public static void main(String[] args) {
                sup s=new sub();
                s.show();//这里用父类接收,可以调用从父类中继承过来的方法或成员。
                //s.show1();编译时期编译就不能通过。
                //如果想调用sub中特有的方法,这个时候就需要强转。
                if (s instanceof sub) {
                        sub s1=(sub)s;
                        s1.show1();
                }
        }
}

回复 使用道具 举报
楼主这句话本生有问题。子类强转父类本来就不存在这种。正如拿一个数组和一个数字做比较一样。
利用父类引用创建子类对象,毕老师说是向上转型。个人理解是,这是形象说法,这不是转型,子类本来就继承父类的功能。只是父类引用子类,不能说儿子变成了爸爸。
毕老师装毕老爹。教程说的很形象。楼主应该多看下教程
回复 使用道具 举报
子类一般不需要强转的吧,因为你创建的子类对象已经有父类的方法了。你所说的把子类强转父类,我觉得应该是父类的引用指向子类这种情况吧。这种现象就是我们常说的多态,为了提高程序的扩展性。
回复 使用道具 举报
父类要转子类才需要强制转换,子类转父类是会自动提升·
当父类引用指向子类实例对象,需要用到子类特有方法的时候 就需要向下转型
回复 使用道具 举报
哎,不懂啊,跟看天书似的
回复 使用道具 举报
秦岩 黑马帝 2012-4-4 14:33:28
12#
好吧,自己回答了,查了很多资料,问了朋友才得到答案:
                当一个子类对象可以匹配多个重载的方法, 而多个方法中的形参是这个子类实现的不同的父类类型.
                这时调用不明确, 因为子类对象可以传入多个方法, 需要强转为父类类型, 才能明确调用哪个方法.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马