多态

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

}

  

原文地址:https://www.cnblogs.com/mjn1/p/11455692.html