多态

多态

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);}}







  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值