目录
一、什么是多态?
某一事物的不同表达形式,即多态。
在Java中,多态是同一个行为具有多个不同表现形式或形态的能力。也可以类比成同一个接口,使用不同的实例执行不同的操作。
二、多态的三大必要条件:
1、继承
2、重写
3、父类引用子类对象:Parent p = new Child();
三、多态的优点:
- 1. 消除类型之间的耦合关系
- 2. 可替换性
- 3. 可扩充性
- 4. 接口性
- 5. 灵活性
- 6. 简化性
四、实例——喂宠物
package Day8_Polymorphic.HomeWork.Work1;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.print("喂宠物(1、猫 2、狗):");
Scanner scanner = new Scanner(System.in);
int count = scanner.nextInt();
switch (count){
case 1:
selectPet(new Cat("猫猫",70));
break;
case 2:
selectPet(new Dog("狗狗",70));
}
}
public static void selectPet(PetAnimal petAnimal){
if (petAnimal instanceof Cat){
Cat cat = (Cat) petAnimal;
} else if (petAnimal instanceof Dog) {
Dog dog = (Dog) petAnimal;
}
}
}
package Day8_Polymorphic.HomeWork.Work1;
import java.util.Scanner;
public abstract class PetAnimal {
private String name;
private int health;
public PetAnimal(String name, int health) {
this.name = name;
this.health = health;
System.out.println(name + "的健康值为:" + health);
Scanner scanner = new Scanner(System.in);
System.out.print("是否喂宠物(1、是 2、否):");
int mount = scanner.nextInt();
switch (mount){
case 1:
this.feedPet();
break;
case 2:
System.out.println("你的宠物健康值正在减少");
System.out.println(name + "的健康值为:" + (health - 10));
break;
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
this.health = health;
}
// 喂宠物
public abstract void feedPet();
}
package Day8_Polymorphic.HomeWork.Work1;
public class Dog extends PetAnimal{
public Dog(String name, int health) {
super(name, health);
this.feedPet();
}
@Override
public void feedPet() {
this.setHealth(super.getHealth() + 10);
System.out.println("狗狗的健康值为:" + this.getHealth());
}
}
package Day8_Polymorphic.HomeWork.Work1;
public class Cat extends PetAnimal{
public Cat(String name, int health) {
super(name, health);
}
@Override
public void feedPet() {
this.setHealth(super.getHealth() + 10);
System.out.println("猫猫的健康值为:" + this.getHealth());
}
}
五、多态的实现方式
方式一:重写
方式二:接口
-
1. 生活中的接口最具代表性的就是插座,例如一个三接头的插头都能接在三孔插座中,因为这个是每个国家都有各自规定的接口规则,有可能到国外就不行,那是因为国外自己定义的接口类型。
-
2. java中的接口类似于生活中的接口,就是一些方法特征的集合,但没有方法的实现。