前言:当一个子类进行向上转型了过后,它当中的方法再也无法被调用(只能通过对父类对象的引用来调用被重写的方法(在子类中)),所以有时会用到向下转型来让父类还原为子类再来调用子类中的方法。向下转型在实际使用过程中,是不常用的,为什么呢?这里用图解演示一下(它可能是不安全的):
1.主代码:(先向上转型然后再进行向下转型的操作)
public class test {
public static void main(String[] args) {
//向上转型
Animal animal = new Dog("花花", 20);
//向下转型(本身为狗,还原为狗,所以是安全的)
Dog dog = (Dog)animal;
dog.bark();
//向下转型(本身为狗,还原为猫,所以是不安全的,不能跨物种嘛,*****所以一般不推荐使用应该尽量避免)
//这里表示如果animal为Cat的实例化对象,很明显不是,它是Dog的实例化对象
if(animal instanceof Cat) {
Cat cat = (Cat)animal;
cat.mew();
}else {
System.out.println("我是猪猪!");
}
}
}
ps:这里引入了instanceof,就是来判断这个Cat是不是animal的实例化对象,如果是的话再进行向下转型的操作,然后去调用子类中的方法
2.Animal,Cat,Dog类的创建:
class Animal {
public String name;
public int age;
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public Animal() {
}
public void sleep() {
System.out.println(this.name + "正在睡觉!");
}
}
class Cat extends Animal {
public Cat(String name, int age) {
super(name, age);
}
public void mew() {
System.out.println(this.name + "正在吃猫粮!");
}
}
class Dog extends Animal {
public Dog(String name, int age) {
super(name, age);
}
public void bark() {
System.out.println(this.name + "正在吃狗粮!");
}
}