多态必须在有继承/实现关系下:有父类指向子类对象,有方法重写(重写之后,同一个行为(run方法)不同的特征)
多态:执行同一个行为(run方法),会表现出不同的行为特征(运行不同的子类方法【子类继承了抽象类,重写了方法】)
package com.itheima.d1_polymorphic;
/**
* 目标:认识多态,理解多态的形式和概念
*/
public class Test {
public static void main(String[] args) {
// 1. 多态的形式:父类类型 对象名称 = new 子类构造器
Animal a = new Dog();
/**
* 多态方法调用:编译看左边,运行看右边 多态侧重行为(方法) 实现在不同对象下,表现不同的行为
* 多态变量的调用: 编译看左边,运行看左边
*/
a.run();// 编译看左边,运行看右边(运行是运行右边的子类方法)
System.out.println(a.name); // 编译看左边,运行看左边(运行左边父类的成员变量)
Animal a2 = new Tortoise();
a2.run();// 编译看左边,运行看右边(运行是运行右边的子类方法)
System.out.println(a2.name);// 编译看左边,运行看左边(运行左边父类的成员变量)
}
}
// 这是一个抽象父类
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 = "子类狗";
@Override
public void run() {
System.out.println("🐕跑的贼快~~");
}
}
// 这是一个子类
package com.itheima.d1_polymorphic;
public class Tortoise extends Animal{
public String name = "子类龟";
@Override
public void run() {
System.out.println("🐢根本跑不了");
}
}