12.多态中的向上转型和向下转型

多态中向上转型与向下转型

多态的转型分为向上转型与向下转型两种:

  • A:向上转型:当有子类对象赋值给一个父类引用时,便是向上转型,多态本身就是向上转型的过程。
    使用格式:
    父类类型 变量名 = new 子类类型();
    如:Person p = new Student();

  • B:向下转型:一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用转为子类引用,这个过程是向下转型。如果是直接创建父类对象,是无法向下转型的
    使用格式:
    子类类型 变量名 = (子类类型) 父类类型的变量;
    如:Student stu = (Student) p; //变量p 实际上指向Student对象

package com.itheima_01;
/*
 *  多态中的向上转型和向下转型:
 * 
 *  引用类型之间的转换
 *      向上转型(自动)
 *          由小到大(子类型转换成父类型)
 *      向下转型(强制)
 *          由大到小(父类型转换成子类型)
 *  基本数据类型的转换
 *      自动类型转换
 *          由小到大
 *          byte short char --- int --- long --- float --- double
 *      强制类型转换(有可能出现损失精度)
 *          由大到小
 *          
 */
public class PoymorphicDemo3 {
    public static void main(String[] args) {
        Animal2 a = new Dog();//向上转型
//      a.eat();
        
        Dog d = (Dog)a;//向下转型
        d.swim();
    }
}

class Animal2 {
    public void eat() {
        System.out.println("吃东西");
    }
}

class Dog extends Animal2 {
    public void eat() {
        System.out.println("啃骨头");
    }
    
    public void swim() {
        System.out.println("狗刨");
    }
}

你可能感兴趣的:(12.多态中的向上转型和向下转型)