多态(精髓):父类对象引用指向子类对象
例如 父类宠物对象引用指向子类对象Dog
父类对象的引用pet 存放在栈中,子类对象实例存放在堆中
Pet pet = new Dog();
这和 double a = 10;
double = int;// 大类型范围 = 小类型范围
Pet pet = new Dog() // Dog is a Pet
假设每种宠物有一个吃食物方法,主人master有一个喂食物方法,
如果不使用多态,我们就会发现,当我们每次增加一个宠物后,我们要写很多类似的方法来实现。这就很麻烦
所以,为了简化代码,和代码的复用,我们在Master(主人)类中写一个喂食物方法,大致的说是喂宠物Pet而不说喂哪一种动物,这就包含了多态的方法——歧义(或者很模糊的概念)。看图:使用父类作为方法的形参
feed 方法中传递一个Pet 类对象,就是说你是那种宠物我不关心,它封装在了pet中,我们通过pet.getName()获取pet的name,再通过调用pet.eat()方法来实现宠物吃的方法
在看Pet类
由于每种Pet所吃的东西是不同的,因此我们这里使用抽象方法eat,可以在每个不同的Pet类中重写,使用抽象方法后,我们要将类也变为抽象类。
在Dog类中具体实现eat方法
其他的宠物类写法一致在这里就不一一赘述。
测试一下