package oop; /* Animal a = new Dog(); * 对象a具有两种类型 * 编译类型: 声明对象变量的类型, Animal, 表示把对象看成什么类型 * 运行类型: 对象的真实类型, Dog, 运行类型-->对象的真实类型 * 注: 编译类型必须是运行类型的父类或相同类型 * 当编译类型和运行类型不同的时候, 就产生了多态 * * 所谓多态: 对象具有多种形态, 对象可以存在不同的形式 * Animal a = null; * a = new Dog(); // 此时a表示Dog类型的形态 * a = new Cat(); // 此时a表示Cat类型的多态 * 多态的前提: 可以是继承关系(类和类), 也可以是实现关系(接口和实现类) * 多态的特点: 把子类对象赋给父类变量, 在运行时期会表现出具体的子类特征 * 多态的作用: 把不同的子类对象都当做父类类型来看待, 可以屏蔽不同子类对象之间的实现差异 * 从而写出通用的代码达到通用编程, 以适应不断变化的需求 */ // 普通动物 class Animal { public void eat() { System.out.println("吃普通的食物"); } } // 狗 class Dog extends Animal { public void eat() { // 对父类方法的覆盖 System.out.println("吃肉骨头..."); } } // 猫 class Cat extends Animal { public void eat() { // 对父类方法的覆盖 System.out.println("吃鱼刺..."); } } // 饲养员 class Person { public void feed(Animal d) { System.out.println("喂食..."); d.eat(); } } public class TestDemo { public static void main(String[] args) { // 创建饲养员对象 Person p = new Person(); // 创建狗对象 Animal a = new Dog(); p.feed(a); a = new Cat(); p.feed(a); } }