多态
1.多态概念
多态就是多种状态,表现为多种形式的能力
2.多态怎么理解
多态可分为静态多态和动态多态
静态多态 : 当创建一个父类时,子类可以调用父类中的所有方法,而自己没有独有的方法(具体表现方法是重载)
动态多态 : 当创建一个父类时,子类可以调用父类中的所有方法,并且自己还含有具有自己独特特性的的方法(具体表现方法是重写)
3.多态的优点
可以优化程序,增强程序的维护性和可扩展性
4.多态的使用:
创建一个父类,创建一个或多个子类,子类中写一个方法,它只接收父类的变量参数,且不与其他子类相关,编写的程序只与父类打交道。测试时要new 一个对象。
5.关于多态的例子:
/*
* 用Java程序完成以下场景:
*有一个主人(Master类),他养了两只宠物(Pet类),
*一只宠物是狗(Dog类),名字叫“旺财”,另一只宠物是
*猫(Cat类),名字叫“小花”,现在有两种食物(Food类),
*分别是骨头(Bone)和鱼(Fish)。主人分别给两只宠物喂
*食物,两只宠物厌食,狗只吃骨头(如果主人为够吃别的食物,
*就显示“狗不吃某某食物”);猫只吃鱼(如果主人为猫吃别的
*食物,就显示“猫不吃某某食物”
*
*/
package Dmo01;
public class Master {
Pet mPet;
public void setmPet(Pet mPet) {
this.mPet = mPet;
}
public void feedPet(Food food) {
mPet.eat(food);
}
}
package Dmo01;
public class Pet {
private String petName;
public Pet() {
}
public Pet(String petName) {
this.petName = petName;
}
public String getPetName() {
return petName;
}
public void setPetName(String petName) {
this.petName = petName;
}
public void eat(Food food) {
if (food == null) {
System.out.println("主人这个不好吃!");
return ;
}
}
@Override
public String toString() {
return "Pet [petName=" + petName + "]";
}
}
package Dmo01;
public class Cat extends Pet {
public Cat(String name) {
super(name);
}
@Override
public void eat(Food food) {
super.eat(food);
if (food.getClass() == Fish.class) {
System.out.println("主人这个好好吃!");
}else {
System.out.println("主人这个不好吃!");
}
}
}
package Dmo01;
public class Dog extends Pet {
public Dog(String name) {
super(name);
}
@Override
public void eat(Food food) {
super.eat(food);
if (food.getClass() == Bone.class) {
System.out.println("主人我很你讲一个关故事!");
}else {
System.out.println("主人你不要爱我了吗!");
}
}
}
package Dmo01;
public class Food {
private String foodName;
public String getFoodName() {
return foodName;
}
public void setFoodName(String foodName) {
this.foodName = foodName;
}
public Food(String foodName) {
super();
this.foodName = foodName;
}
public Food() {
super();
}
@Override
public String toString() {
return "Food [foodName=" + foodName + "]";
}
}
package Dmo01;
public class Fish extends Food{
public Fish(String name) {
super(name);
}
}
package Dmo01;
package Demo01;
public class Bone extends Food{
public Bone(String name) {
super(name);
}
}
public class Test {public static void main(String[] args) {Master m = new Master();Pet dog = new Dog("旺财");Pet cat = new Cat("小花");m.setmPet(dog);Food bone = new Bone("骨头");Food fish = new Fish("鱼");m.feedPet(bone);}}