何为多态——和抽象又有什么关系

到底什么是多态?
面向对象三大特征:封装、继承、多态
前面两个应该比较好理解,顾名思义,那最后这个多态到底是什么?
我最近也看了一些相关的文章,但是可能因为水平尚浅,不是很能理解
所以想自己总结一下,不一定完全正确,欢迎大家提出意见

我认为多态这两个字,可以解释为 多个形态
多态其实是建立在封装与继承的基础之上的,尤其是继承
我们首先创建一个动物类,因为动物需要吃饭,喝水
所以我们就为它定义这两个属性

public class Animal{
	// 吃东西
	private String eat;
	// 喝东西
	private String drink;
}

然后我们再定义一个具体的动物老虎,让它去继承这个动物类,老虎里面什么属性都没有定义

public class Tiger extends Animal{
}

然后我们再定义一个狮子对象,也让它去继承动物

public class Lion extends Animal{
}

然后我们定义一个方法,参数传Animal对象,同时创建狮子与老虎的具体对象去调用它

private void testAnimal(Animal animal) {
        animal.setEat("狗粮");
        animal.setDrink("矿泉水");
    }


public void test() {
        Tiger tiger = new Tiger();
        testAnimal(tiger);
        Lion lion = new Lion();
        testAnimal(lion);
    }

通过这个例子可以看到,假如我们把testAnimal这个方法抽象为接口,我们的参数只需要定义一个Animal父类就可以,不需要去关心对方到底想传什么动物
即使再新建黑熊、河马等等,这些动物都需要去吃东西,喝东西,但我们不可能为每个动物都写个方法,那样代码会变得极为重复并且不利于维护

然后可能有同学会有疑问,那要是不同的动物需要吃不同的东西怎么办,你这都写成固定的数据了,这个更简单了,还是两个字,抽象,再把狗粮与矿泉水抽象为参数就可以了

public void test() {
        Tiger tiger = new Tiger();
        testAnimal(tiger,"面包","牛奶");
        Lion lion = new Lion();
        testAnimal(lion,"香肠","可乐");
    }

    private void testAnimal(Animal animal, String food, String water) {
        animal.setEat(food);
        animal.setDrink(water);
    }

上面只是一个简单的例子,多态还需要在代码中不断地去理解,去总结,掌握并非一朝一夕
多态的最大作用就是 让大家实现了 面向抽象编程,面向接口编程

有了多态,我们能把具体的老虎、狮子的接口抽象为动物
多态就好像一只无形的手将基类(Anmial)还有子类(Tiger,Lion)联系起来,如果没有多态,那么很多继承可能就失去了作用,抽象也成为了空谈

总而言之,封装和继承是多态的基石,有了多态才能进行真正的面向对象编程,面向接口编程

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值