趣味故事掌握面向对象编程,巨头家族发家之内幕解读!

简介: 小白最近看了很多讲面向对象的资料,就是记不住。结果他奶奶很着急,过来让我帮忙。你说怎么小白150斤了还要人心疼!奶奶说不会吧,难道这个问题把我这个十年老兵难住了?然后又是夸了一顿!哎,碍于情面,我就给奶奶讲吧,让她回去再告诉小白。

大伙都知道面向对象有三大特点:封装,多态,继承。

雷学委将从一个巨头家族如何挣钱发家来深度剖析面向对象的三个特性。

image.png

怎么理解多态?

开始巨头的故事:以前有一个商业巨头:大大大企业家王总,他有一儿一女,然后他宣布把集团划分为两个部分。给两个人分开管理。

并提出一个要求:赚钱盈利。


儿子把子业务群进行调整打包整合了一个游戏生态,日赚不止208W,这也是一个巨头。


女儿把子业务群进行调整打包整合了一个电商生态,日赚也不止208W,这么猛又一个巨头啊!


王总看了直呼惊艳!


好这里,回到主题,里面说的什么契合多态呢?


赚钱盈利 这个指标就是父类的一个方法!

儿子女儿虽然都有各自的实现方法赚钱方式,但是都达到符合了赚钱的目标。


这就是多态!


忘记提了,王总原来是做房地产发家的,所以他自己实现的赚钱盈利方法:房地产销售和服务等


多态的概念:多个不同的对象对同一消息作出响应。同一消息根据不同的对象而采用各种不同的方法。

换句话说,不论传递过来的究竟是哪个类的对象,函数都能够通过同一个标准(接口)调用到适应各自对象的实现方法。


还不明白就,看下图,金黄色椭圆就是一个接口,内声明了赚钱这个方法。王总,儿子,女儿都有各自实现。这就是多态,各个实现的类都有自己的赚钱方式!


既统一保证他们都有赚钱方式,又没有扼杀他们的才华,在各自赛道挣钱。


image.png

这里稍微看一下代码,我们先定一个接口:EarnMondey(挣钱不寒颤)。

/**
 * @author levin
 * Created on 2021/6/17
 * [B站 雷学委] CSDN/Juejin Code Demo
 */
public interface EarnMoney {
    // 实现类必须实现盈利赚钱的方法
    Long earnW();
}

下面看看多态的实现:

// 雷学委 CSDN/Juejin代码分享
// 这是老王一家子(王总+儿子01+女儿02)
public class WangZong implements EarnMoney {
    /**
     * 存款
     * @return
     */
    public String saving() {
        return "¥3000亿";
    }
    public String earnW() {
        return "搞房地产挣钱!!!";
    }
}
class XiaoWang01 extends WangZong {
    @Override
    public String earnW() {
        return "搞游戏特挣钱!!!";
    }
}
class XiaoWang02 extends WangZong {
    @Override
    public String earnW() {
        return "搞电商生态也特挣钱!!!";
    }
}

是不是跟上面说的一样?


类WangZong/XiaoWang01/XiaoWang02 都对EarnMoney有各自不同实现!(这里的’类‘,表示一类事物的统称。比如车‘类’代表车辆特征这一类事物,有轮子能开启来。


多态就是如此。接口规定了一个标准的方法(就是赚钱),父亲已经有一个成熟的经商赚钱的方法,不过他的子女重新实现了各自赚钱方法。


好我们,打印一下他们赚钱的方法,返回效果如下。


image.png

下面来看看继承。


什么是继承?

你看,王总商业帝国那么大,这么大规模的资产。假设他的全部资产变现,估算的总额为3000亿元。


没有继承制度,那干一辈子不都打水漂了嘛!


所以现实中,他的两个子女都是能合法享有老王创造的财产,资源,人脉等,累计3000亿。


这就是继承。


继承的概念:从已知类派生出一个或多个新的子类。父类所有非私有化的属性和方法,子类都继承,也可以扩展重写父类方法(非final声明的)。

前面代码所示:XiaoWang01 和XiaoWang02都继承(extend)了老王WangZong。


细心的同学应该有留意到上面代码WangZong这类代码里面还贴了一个saving方法,对,这个就是他的全部资产合计面额值。子女类中不用再实现这个,复用了代码。


简化如下图:王总有一个存款的方法,子女都继承了。


image.png

好,我们看看代码演示效果:

image.png

到这里,学委有必要展示一下上效果图的代码了。

/**
 * @author levin
 * Created on 2021/6/17
 * [雷学委] CSDN/Juejin Code Demo
 */
public class LeiXueWeiRunner {
    public static void main(String[] args) {
        System.out.println("【雷学委代码Demo】");
        EarnMoney wz = new WangZong();
        EarnMoney wzSon = new XiaoWang01();
        EarnMoney wzDaughter = new XiaoWang02();
        System.out.println("王总的生财之道:" + wz.earnW());
        System.out.println("王总儿子的生财之道:" + wzSon.earnW());
        System.out.println("王总女儿的生财之道:" + wzDaughter.earnW());
        System.out.println("------------demo 一下继承 ------------");
        System.out.println("王总资产:" + ((WangZong) wz).saving());
        System.out.println("儿子继承的资产:" + ((WangZong) wzSon).saving());
        System.out.println("女儿继承资产:" + ((WangZong) wzDaughter).saving());
    }
}

重点代码解析

‘System.out.println("------------demo 一下继承 ------------");’这行代码之后的三行代码,需要把wz/wzSon/wzDaughter 进行类型转换成王总,那是肯定的。


小白奶奶稍微有点疑惑了。


因为saving这个方法只在王总那里定义了,调用时必须保证是亲生血缘关系,不是亲生的这里Java会爆出类型转换的错误!


奶奶一下子明白了,对这巨额资产不能白送了,必须保证直系亲属!


下面再谈谈封装。


怎么理解封装?

封装,就是把实现通过包装变成统一的对外呈现,模块化来使用,重点是隐藏了实现细节,其他外部访问无法攥改内部细节。


好结合上面的例子,请读者细想30秒,想想哪些事情很像封装?


好,这里揭晓了。


上面的saving方法就是一种封装。


封装的概念:把对象的内部细节(属性和方法)结合成一个独立的整体,隐藏实现细节,并提供对外访问的接口。


不过我这里想举例的是,另一个,那就是王总立遗嘱,他人只能知道遗嘱声明,但是无法攥改遗嘱细节,也不清楚这个遗嘱怎么写的,跟哪些人商议决定的。


好家伙,封装还有这个用途。这里用遗嘱也是想更鲜明的突出:隐藏细节,不可攥改的特点。


如下图, 封装 把内部属性和处理逻辑给隐藏起来了,而且外部无法攥改!


image.png

这是最终王总这个类的代码,我们在代码中加上了遗嘱”testament“这个公开的方法,其他类包括资料能看到,但是无法修改!律师只执行王总遗嘱无法修改。

目录
相关文章
|
5月前
|
Python
编程之禅的奇幻之旅:探寻代码世界与生活万象的惊世共鸣,颠覆你的认知!
【8月更文挑战第7天】编程不仅是技术活,更融汇艺术与哲学。它启示我们在生活里追求简洁高效,如Python列表推导式的优雅;教会我们面对挑战时冷静分析,正如调试代码;体现分工合作的重要性,像模块化设计;并鼓励持续优化,提升效能。编程所蕴含的生活智慧,能引导我们创造更美好、有序的人生。
57 1
|
7月前
|
存储 编译器 C语言
【C++航海王:追寻罗杰的编程之路】类与对象你学会了吗?(上)
【C++航海王:追寻罗杰的编程之路】类与对象你学会了吗?(上)
37 2
|
7月前
|
编译器 C++
【C++航海王:追寻罗杰的编程之路】多态你了解多少?
【C++航海王:追寻罗杰的编程之路】多态你了解多少?
41 0
|
7月前
|
安全 Java 程序员
【C++航海王:追寻罗杰的编程之路】继承你学会了么?
【C++航海王:追寻罗杰的编程之路】继承你学会了么?
35 0
|
7月前
|
存储 编译器 C++
【C++航海王:追寻罗杰的编程之路】类与对象你学会了吗?(中)
【C++航海王:追寻罗杰的编程之路】类与对象你学会了吗?(中)
25 0
|
7月前
|
编译器 C++
【C++航海王:追寻罗杰的编程之路】类与对象你学会了吗?(下)
【C++航海王:追寻罗杰的编程之路】类与对象你学会了吗?(下)
32 0
|
8月前
|
设计模式 缓存 安全
感受单例模式的力量与神秘:掌握编程的王牌技巧
在软件开发的赛场上,单例模式以其独特的魅力长期占据着重要的地位。作为设计模式中的一员,它在整个软件工程的棋盘上扮演着关键性角色。本文将带你深入探索单例模式的神秘面纱,从历史渊源到现代应用,从基础实现到高级技巧,经过戏剧性的转折和层层推进,我们将一步步揭开这一模式背后的秘密。文章串起时间的线索,带你重回单例模式的起源,理解它在软件工程历史中的地位。经过时间的流逝,单例模式不仅保持了其原有的魅力,而且随着新的编程语言和技术的发展,还展示出了新的活力和应用场景。
78 1
|
Cloud Native 程序员 Serverless
你眼中的程序员 vs 程序员眼中的自己,是时候打破刻板印象了丨KubeCon 主题活动
你眼中的程序员 vs 程序员眼中的自己,是时候打破刻板印象了丨KubeCon 主题活动
|
算法 安全 程序员
"她力量"让梦想照进现实,共话来自 Google 谷歌的女性力量
"她力量"让梦想照进现实,共话来自 Google 谷歌的女性力量
141 0
"她力量"让梦想照进现实,共话来自 Google 谷歌的女性力量
|
存储 监控 安全
从平凡到非凡 阿里云李克的技术进阶之路
人物简介:李克 阿里云边缘云计算领域技术负责人 2009年硕士毕业加入阿里至今,一直从事CDN及边缘云领域的技术研发工作,在CDN、边缘计算等方向上有丰富的行业经验,全程参与了阿里云CDN商业化转型,边缘云中台体系的建设,研究方向包括数据智能、分布式架构和性能优化、云计算等领域。目前主要负责边缘云的技术研发以及架构演进。
948 1
从平凡到非凡 阿里云李克的技术进阶之路