多态就是父类引用指向子类对象 例如Animal a = new Dog();//向上转型
多态必须使用向下转型的时候:当在其他类中调用子类对象中独有的方法的时候需要向下转型 Animal a = new Dog(); Dog d = (Dog) a;//向下转型
多态在实际中的应用实际上就是为了程序的扩展性,OCP原则,关闭修改性,提高可扩展性,尽可能的少修改代码
/* 测试多态 1.编写程序实现乐手弹奏乐器。乐手可以弹奏不同的乐器从而发出不同的声音。 可以弹奏的乐器包括二胡、钢琴和琵琶。 实现思路及关键代码: 1)定义乐器类Instrument,包括方法makeSound() 2)定义乐器类的子类:二胡Erhu、钢琴Piano和小提琴Violin 3)定义乐手类Musician,可以弹奏各种乐器play(Instrument i) 4)定义测试类,给乐手不同的乐器让他弹奏 */ public class TestMusic { public static void main(String[] args) { Musician m = new Musician(); Violin v = new Violin(); m.play(v); } } class Instrument { public void makeSound(){ System.out.println("乐器发声"); } } class Erhu extends Instrument { public void makeSound(){ System.out.println("二胡在拉"); } } class Piano extends Instrument { public void makeSound(){ System.out.println("弹钢琴"); } } class Violin extends Instrument { public void makeSound(){ System.out.println("拉小题琴"); } } class Musician { public void play(Instrument i){ i.makeSound(); } }
/* 编写程序模拟“主人”喂养“宠物”的场景: 提示1: 主人类:Master 宠物类:Pet 宠物类子类:Dog、Cat、YingWu 提示2: 主人应该有喂养的方法:feed() 宠物应该有吃的方法:eat() 只要主人喂宠物,宠物就吃。 要求:主人类中只提供一个喂养方法feed(),要求达到可以喂养各种类型的宠物。 编写测试程序: 创建主人对象 创建各种宠物对象 调用主人的喂养方法feed(),喂养不同的宠物,观察执行结果。 通过该案例,理解多态在开发中的作用。 重要提示:feed方法是否需要一个参数,参数选什么类型!!! */ class Testfeed{ public static void main(String[] args) { //创建一个宠物对象 Pet pet = new Pet(); //创建一个狗对象 Dog dog = new Dog(); //创建一个主人对象 Master master = new Master(); //调用主人投喂方法 master.feed(dog); } } class Pet{//创建宠物类让其它类都继承他 public void eat(){//创建宠物吃方法 System.out.println("动物在吃"); } } class Dog extends Pet//创建狗类 { public void eat(){//覆盖父类吃方法对吃方法重写 System.out.println("狗在吃"); } } class Cat extends Pet { public void eat(){ System.out.println("猫在吃"); } } class YingWu extends Pet { public void eat(){ System.out.println("鹦鹉在吃"); } } class Master { public void feed(Pet p){//此处实际上是 Pet p = new Dog();此处涉及到父类引用指向子类对象,即多态 p.eat();//调用父类吃方法,此处为编译器识别通过,具体调用哪个子类的吃方法还要看动态绑定的那个子类是啥 } }