黑马程序员技术交流社区

标题: 子类类型强制转换父类类型的问题(已解决) [打印本页]

作者: 秦岩    时间: 2012-4-3 22:32
标题: 子类类型强制转换父类类型的问题(已解决)
本帖最后由 lyqinyan 于 2012-4-4 15:46 编辑

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



好吧,自己回答了,查了很多资料,问了朋友才得到答案:
                当一个子类对象可以匹配多个重载的方法, 而多个方法中的形参是这个子类实现的不同的父类类型.
                这时调用不明确, 因为子类对象可以传入多个方法, 需要强转为父类类型, 才能明确调用哪个方法.
作者: 郑苑东    时间: 2012-4-3 22:53
子类对象可以直接当成父类类型来用。。。不需要强转吧.你强不强转都行。。
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 {}
作者: 陈苓    时间: 2012-4-4 01:26
  那就要用到多太的向上转型
转型就是扩展性,按照父类型操作,父类可以指向所有子类对象,向上转型局限性就是多态的弊端
作者: 胡元    时间: 2012-4-4 05:45
上面一楼已经给出代码,我完全同意。我想对这位同学说的是,子类类型强转父类类型完全没有意义。
因为我们把父类对象强转成子类类型,时因为子类有的特有方法父类不能用。而以大摇大摆的用父类所有的方法。并且
我们在用到多态时,父类引用指向子类对象,这时子类对象已经自然转换成父类对象了,再转一次不是浪费力气吗?
作者: 戴振良    时间: 2012-4-4 08:32
如果父类要转子类才需要强制转换,子类转父类是会自动转的!
作者: 刘_浩    时间: 2012-4-4 10:22
父类引用建立子类对象,这样的方式只能访问父类中的成员,如果要访问子类中特有成员,就必须向下转型,才能访问,因为这是特有成员, 是父类不具有的。
作者: 李敏    时间: 2012-4-4 10:48
子类对象用父类类型接收,这是多态形式。
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 11:01
楼主这句话本生有问题。子类强转父类本来就不存在这种。正如拿一个数组和一个数字做比较一样。
利用父类引用创建子类对象,毕老师说是向上转型。个人理解是,这是形象说法,这不是转型,子类本来就继承父类的功能。只是父类引用子类,不能说儿子变成了爸爸。
毕老师装毕老爹。教程说的很形象。楼主应该多看下教程

作者: 黑马老兵    时间: 2012-4-4 11:02
子类一般不需要强转的吧,因为你创建的子类对象已经有父类的方法了。你所说的把子类强转父类,我觉得应该是父类的引用指向子类这种情况吧。这种现象就是我们常说的多态,为了提高程序的扩展性。
作者: 攻城狮    时间: 2012-4-4 12:43
父类要转子类才需要强制转换,子类转父类是会自动提升·
当父类引用指向子类实例对象,需要用到子类特有方法的时候 就需要向下转型
作者: mooo.java    时间: 2012-4-4 12:59
哎,不懂啊,跟看天书似的
作者: 秦岩    时间: 2012-4-4 14:33
好吧,自己回答了,查了很多资料,问了朋友才得到答案:
                当一个子类对象可以匹配多个重载的方法, 而多个方法中的形参是这个子类实现的不同的父类类型.
                这时调用不明确, 因为子类对象可以传入多个方法, 需要强转为父类类型, 才能明确调用哪个方法.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2