public static void function(Animal a){
a.eat();
//判断某一类型是否符合指向的某一对象类型,用instanceof
if (a instanceof Cat){
Cat c = (Cat)a;
c.catchMouse();
}else if (a instanceof Dog){
Dog d = (Dog)a;
d.kanjia();
}
1、它们必须有继承关系。
2、赋值等号的右边的类型必须确定是等号左边的类型才能转换成功。也就是说把一个父类强转为子类,那么这个父类的引用必须是指向子类的引用。作者: HM何伟 时间: 2013-3-30 22:10
算是吧, instanceof是用于判断传进来的类类型,如果条件成立了,就将原本new Cat()==>Animal a(是类型的提升,将Cat类型提升成了Animal类型),又将Animal类型强制转成Cat类型的.
当条件不成立时,else if中的同理.作者: 黑马李杰 时间: 2013-3-30 22:28
public static void function(Animal a){}当我们把一只Dog对象作为参数传递给function(Animal a)函数时,相当于Animal a = new Dog();这是向下类型转换,因为a是Animal类型的所以只能用父类的方法和属性。Dog d = (Dog)a,这是向上类型转换,不是把动物类强转成狗类,而是a本来就是指向Dog的对象,这样做是为了调用Dog类中独有的数据作者: _王涛 时间: 2013-3-30 22:52 本帖最后由 _王涛 于 2013-3-30 22:53 编辑
public static void function(Animal a){
a.eat();
//判断某一类型是否符合指向的某一对象类型,用instanceof
if (a instanceof Cat){
Cat c = (Cat)a;
c.catchMouse();
}else if (a instanceof Dog){
Dog d = (Dog)a;
d.kanjia();
}
}
上面代码不是将动物强转成狗,因为用instanceof判断后看输入的a 是否是Dog对象,如果满足条件后才进行向下转型
也就是 Dog d = (Dog)a; a只是父类引用而已,它所指的是子类对象。
希望帮到你!