理解多态![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/720d1ac62a4c7b99ea1bbc4004607335.jpeg#pic_center)
public class Animal {
public void move(){
System.out.println("Animal移动");
}
}
class Cat extends Animal{
@Override
public void move(){
System.out.println("Cat走猫步");
}
//cat特有方法
public void catchMouse(){
System.out.println("cat抓老鼠");
}
}
class Bird extends Animal{
@Override
public void move(){
System.out.println("Bird飞翔");
}
//Bird特有方法
public void sing(){
System.out.println("Bird会唱歌");
}
}
public class TestAnimal {
public static void main(String[] args) {
//向上转型(自动)
Animal c = new Cat();
c.move();//调用重写之后的move方法
Animal b = new Bird();
b.move();//调用重写之后的move方法
//调用子类特有的方法时才需要向下转型
if(c instanceof Cat){//判断底层c是否是Cat对象
Cat cat =(Cat)c;
cat.catchMouse();//向下转型后才能调用子类特有的方法
}else if(c instanceof Bird){//肉眼能看到底层是什么对象,但是会存在一些方法的参数是父类引用,调用这些方法的时候可能传递的就是子类的实例,所以但是不确定是哪一个实例,急需要一一判断
Bird b1 = (Bird) c;
b1.sing();
}
if (b instanceof Bird){//判断底层b是否是Bird对象
Bird bird = (Bird) b;
bird.sing();//向下转型后才能调用子类特有的方法
}else if(b instanceof Cat){
Cat c1 = (Cat)b;
c1.catchMouse();
}
}
}
将就看看吧,希望有所帮助。