好吧,自己回答了,查了很多资料,问了朋友才得到答案:
当一个子类对象可以匹配多个重载的方法, 而多个方法中的形参是这个子类实现的不同的父类类型.
这时调用不明确, 因为子类对象可以传入多个方法, 需要强转为父类类型, 才能明确调用哪个方法.作者: 郑苑东 时间: 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();
}
}
}