java多态的好处_java_使用多态的好处(例子)

学java的都知道java的三大特性:封装、继承、多态。

之前对多态了解的不是特别清楚,现在权当是写个列子加深印象,说明适当的时候使用多态可以达到的好处。

比如,现在在动物园,饲养员的话需要喂养很多动物,正常情况下的话,对饲养员来说需要一个一个去喂养,写成程序的方法如下:

public classPerson {//饲养员喂猫

public voidfeed(Cat cat){

System.out.println("喂猫");

}//饲养员喂狗

public voidfeed(Dog dog){

System.out.println("喂狗");

}//饲养员喂养其他动物……

}

再把具体的动物形象出来

public class Cat {public voideat(){

System.out.println("猫吃饭");

}

}

public class Dog{public voideat(){

System.out.println("狗吃饭");

}

}

这种情况下,饲养员需要针对每种动物去专门喂养,写成程序如下

public classFeed {public static voidmain(String[] args) {

Cat cat= newCat();

Dog dog= newDog();

Person person= newPerson();//饲养员喂猫

person.feed(cat);//饲养员喂狗

person.feed(dog);

}

}

如果动物很多,饲养员就会很累,需要不同动物的feed方法,程序就需要new 很多具体动物出来,写出来也比较繁琐,这时候就体现出多态的好处。

我们只需要在每个动物的食盆前面加上自动喂食的机器,饲养员只需要在房间里按下按钮,食物就自动倒在动物的食盆里,所以,饲养员就不需要专门到每个动物前面喂食了,所以我们只需要修改饲养员的喂养方法,让饲养员只有一个喂养动物的方法

public classPerson {//饲养员喂食

public voidfeed(Animal animal){

System.out.println("喂" + animal.getName() + "吃饭");

}

}

我们再把具体的动物写出来

public classAnimal {privateString name;publicString getName() {returnname;

}publicAnimal setName(String name) {this.name =name;return this;

}public voideat(Animal animal) {

System.out.println(animal.getName()+ "在吃饭");

}

}

public class Cat extends Animal {

private String name;

public String getName() {

return name;

}

public Cat setName(String name) {

this.name = name;

return this;

}

public Cat(String name) {

this.name = name;

System.out.println(this.name + "食盆倒满");

}

}

public class Dog extends Animal {

private String name;

public String getName() {

return name;

}

public Dog setName(String name) {

this.name = name;

return this;

}

public Dog(String name) {

this.name = name;

System.out.println(this.getName() + "食盆倒满");

}

}

这样,饲养员喂养的时候,只需要调用喂养的方法就可以了,不需要知道专门的动物

public class Feed {

public static void main(String[] args) {

Person person = new Person();

Animal animal_1 = new Cat("猫");

//喂猫

person.feed(animal_1);

Animal animal_2 = new Dog("狗");

//喂狗

person.feed(animal_2);

}

}

f43550a3975712c05e7384a42dabb54f.png

这样写出来,饲养员就会省事省时省力很多。

我们可以把不同子类的对象都当做父类类型来对待,可以屏蔽不同子类对象之间的实现差异,从而写出通过的代码达到通用编程,以适应需求的不断变化。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值