多态解决了之前的疑问:左边是对象类型,右边是对象的构造器(执行的方法都在构造器里面)
Animal a = new Dog(); // 这是一个多态类型,左边是对象的类型,右边是该对象的构造器
传入的参数,为Animal类型,但是是Dog的构造器,所以执行的是Dog类的方法
运行流程:
多态下,不能访问子类独有功能(父类没有的):因为编译看左边(父类没有该方法,所以没有对该方法进行编译),只能访问重写的功能


package com.itheima.d2_polymorphic_advantage;public class Test {public static void main(String[] args) {Animal a = new Tortoise();go(a); // 传入的参数,为Animal类型,但是是Tortoise的构造器Animal a2 = new Dog();go(a2); // 由于是Dog的构造器,所以执行的是Dog方法// a2.lookDoor(); 多态下,不能访问子类独有功能(父类没有的)}/*** 要求:所有的动物都可以进来比赛*/public static void go(Animal a) { // 如果写Dog类,只有Dog类的对象能进来,如果是Animal就是所有的动物都能进来System.out.println("开始.....");a.run(); // 运行该对象的方法(看右边)System.out.println("结束。。。。");}}
// 这是一个抽象父类package com.itheima.d1_polymorphic;public abstract class Animal {public String name = "父类动物";public abstract void run();// 就定义方法,让子类继承}// 这是一个子类package com.itheima.d1_polymorphic;public class Dog extends Animal{public String name = "子类狗";@Overridepublic void run() {System.out.println("🐕跑的贼快~~");}}// 这是一个子类package com.itheima.d1_polymorphic;public class Tortoise extends Animal{public String name = "子类龟";@Overridepublic void run() {System.out.println("🐢根本跑不了");}}
