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);
}
}
