- 多态的概述
什么是多态:多种形态。
分两部分:
- 功能多态:一个行为多种实现方式 体现:重写和重载
- 形态多态:一个类型的多种表现形式比如:动物多种表现形式:猫、狗
Animal a=new Dog();//父类的引用指向子类的对象(即向上转型),反过来不行
水:气态,冰
描述一类对象的时候,比如我可以称呼猫为猫,还可以说猫是动物,人这一类两种表现形式:男人、女人,动物的表现形式:猫、狗、猪、蛇、老鼠
实现多态:方式?
重写 重载
多态概念;
多态的有点
多态的使用
需求:定义cat dog,抽取父类(公共属性 公共行为呢?)
Cat 行为:吃 睡 捉老鼠 叫
Dog 行为:吃 睡 看门 叫
Animal 行为:吃 叫 睡
人类:eat sleep
学生 eat sleep study
教师 eat sleep work
软件工程师 eat sleep program
使用多态时一些 注意事项:
- 存在继承
- 方法重写
OOP优势:高度实现应用程序的可维护性、扩展性和安全性
例一、使用多态为宠物看病
需求说明:
(1)编写主人类(Master),添加不同的方法,根据输入的宠物类型不同,为不同的宠物看病。编写测试类验证;
(2)使用多态修改代码,为各宠物类添加看病的方法,主人类中保留一个为宠物看病方法即可,参数类型为宠物类类型。编写测试类验证输出效果如图所示。(注意:同一个引用类型,使用不同的实例而执行不同操作就是多态;方法重写是实现多态的基础)
package day08.demo1;
/**
* 猫类
*/
public class Cat extends Pet{
public Cat(){
}
public Cat(String name, int healthy, int love, String variety) {
super(name, healthy, love,variety);
}
/**
* 治疗
*/
@Override
public void cure() {
if(this.getHealthy()<=10){
System.out.println("*********************************");
System.out.println("吃药");
}
}
}
package day08.demo1;
/**
* 狗类
*/
public class Dog extends Pet{
public Dog(){
}
public Dog(String name, int healthy, int love, String variety) {
super(name, healthy, love,variety);
}
/**
* 治疗
*/
@Override
public void cure() {
if(this.getHealthy()<=10){
System.out.println("*********************************");
System.out.println("吃药");
}
}
}
package day08.demo1;
/**
* 主人类
*/
public class Master {
public void treatment(Pet pet){
pet.cure();
}
}
package day08.demo1;
import day02.Calculator;
/**
* 测试类
*/
public class Test {
public static void main(String[] args) {
Pet dog=new Dog("无名氏",10,20,"吉娃娃犬");
dog.show();
Master master=new Master();
master.treatment(dog);
System.out.println();
Pet cat=new Cat("小白",60,20,"中国猫");
cat.show();
master.treatment(cat);
}
}