Java基础 -- 多态

前言

写这篇文章的时候,其实我在写关于spring框架ioc的复习理解。使用框架还是比较多的,在平时项目中,参考资料也比较多。可能每个人的理解不同,工作中常用的也就注入用的比较多,所以ioc如果你想去理解,还是比较复杂的。

准备参考个例子来写,设计到了多态方面接口指向实现类,以及关于多态方面的父类指向子类,所以,我觉得应该先把多态先复习一下。我参考了一些资料掺杂在自己的理解汇总如下:

正文

什么叫多态,就是不同类型在不同情况下的不同状态,这也是java核心的最后一个核心,封装,继承,多态,所以多态存在必需有三个条件:

  • 要有继承;
  • 要有重写;
  • 父类引用指向子类对象。

那么多态有什么用呢?主要就是为了扩展方便,假设你做个东西,按人的正常逻辑实现,其实也就是java设计的逻辑。

人做事情正常是什么逻辑,很少有一个人把所有事情做完,最高效的,做一个大的东西,咱们都需要分工,分成模块,每个人做一样,最后汇总在一起。这东西就成了。每个人做的事情,专长基本都是不同的,每个人分工不同,所以造出的东西不同,这就是一个个对象。每个人拿到的图纸不同,就是一个个类,对象创建成功后,把对象放在一起,来实现一个大一点的功能。

一个产品被设计出来了,人们最先想到的就是封装,核心的东西不可能外传,再着就是继承,原有图纸不能丢,所有的设计围绕以前的设计图纸更新迭代为更好的产品。

那么问题来了,多态是什么,你产品设计完成了,比如说机器人,你迭代造了很多机器人,一个比一个完美,一个比一个高效,这些机器人各种各样的,你让他们去充电,你要给每个人一个个的发送指令,太累了。所以大家都喜欢统一管理东西,这样管理起来比较方便。也方便处理。

这些机器人可能各有不同,但是他们在设计的时候,都是根据第一个机器人设计的。比如第一个机器人,只有充电,前进功能。那么充电,和前进也就是后面新的迭代的机器人的原始指令。

为了方便管理,你需要唤醒他们的原始指令。

唤醒原始充电指令。父类指向子类。去充电,所有机器人后面没有改写充电方法的,就按原始方法充电,更新迭代了充电方法的,按子类自己的方法充电。这就是多态。也叫做向上转型。

既然有像上转型,自然有向下转型,充完电了,每个机器人要做自己的事情,但是他们现在在原始状态,只有充电前行。向下转型为个人状态,大家可以自己做自己的事情了。

无论接口也好,父类也罢。在设计的时候都喜欢用接口开发,毕竟在实战当中我们更喜欢用接口去做多态。

为什么?

接口是抽象的,比如说我下面有个机器人是给我倒水的实现类倒水接口,叫做张三机器人,还有一个李四机器人也实现了倒水接口,有倒水功能。我说给我倒水,张三如果坏了,我就让李四去倒。为什么呢,因为他们都实现了我倒水这个接口,实现了我这个接口,我不管他们方法重写后,是歪着脖子去倒,还是趴着去倒,都给我去倒水了。是不是根据很飘逸,你们爱怎么倒怎么倒,倒来就行。

但是如果是父类的话,张三李四不需要重写我倒水的方法,而是继承了,父类里面倒水比如是跪着倒。张三爆了,张四去倒,如果自己没有重写自己倒水的方法,只能跟父类的倒水方法,跪着去倒,太没有个性了,我不喜欢。

这就是两个多态的区别。白话文讲了这么多,上代码一目了然;

代码部分

public interface Office {
    // 定义一个打开方法,具体实现由实现类去做 
    String open();
}
class 张三 implements Office{

    @Override
    public String open() {

        return "歪脖子倒水";
    }
}
class 李四 implements Office{
        @Override
        public String open() {
            return "趴着倒水";
        }
    }



//老板来了
public class  Boos {
    public static void main(String[] args) {
    创建一个机器人工作,让张三去
Office oooooooooooooo  = new 张三();
 		控制台打印张三去倒水去了
 	String ok = 	oooooooooooooo .open;
 		突然张三坏了
		没事
Office oooooooooooooo  = new 李四();
其他的都不需要动,虽然不能歪着脖子趴着倒也行
		
    }
}

基本就这样,如果你用父类其实也差不多,只不过可能都是跪着去倒,如果不重写的话。
这就是多态了,统一管理

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值