//多态展示,主函数
class DuoTaiDemo1
{
public static void main(String[] args)
{
function(new Cat());
}
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();
}
public static void function(Animal a){}当我们把一只Dog对象作为参数传递给function(Animal a)函数时,相当于Animal a = new Dog();这是向下类型转换,因为a是Animal类型的所以只能用父类的方法和属性。Dog d = (Dog)a,这是向上类型转换,不是把动物类强转成狗类,而是a本来就是指向Dog的对象,这样做是为了调用Dog类中独有的数据
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只是父类引用而已,它所指的是子类对象。
希望帮到你!