前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >想要成为VIP等级玩家吗 先来学学继承

想要成为VIP等级玩家吗 先来学学继承

作者头像
用户5745563
发布2019-07-04 11:45:24
3300
发布2019-07-04 11:45:24
举报
文章被收录于专栏:码思客码思客
java零基础入门-面向对象篇(八) 继承 与 封装

每次看到继承就勾起了我当年学习这块知识的时候,那痛苦不堪的回忆。

当年学继承的时候 到处都是 A啊B啊继承啊,不仅看的头皮发麻,还容易被绕晕,你们写教材的大佬举个轻松愉快的例子会怀孕吗?啊啊啊???

再就是,动不动就是儿子老子,孙子爷爷,你继承你爹的,你爹继承你爷爷,你家关系是有多复杂,搞来搞去好像就你活着就是为了你爹那点私房钱,真是不忍直视。

为了好好解释继承这个东西,我专门研究了一下某大厂的VIP系统(小编如此用心良苦,你们忍心不点赞么),此系统可是鼎鼎大名的,我们从系统功能设计的角度来看看继承。

什么是继承 ?为什么要继承 ?

java里面继承关系的关键字是extends,而这个单词却跟继承八竿子打不着关系,其实我们通常说的继承应该描述为 扩展 才更加准确。

关键字

在我们为一个系统写功能的时候,会遇到这种情况,新建了一个类,用着用着发现又要新建一个类,而这个类只与前面那个类有些许不同,大部分是相同的,而我们不得不去将属性啊,方法啊重新再写一遍。我们前面说了,写代码千万不要复制粘贴,我们学习的方法是在类的内部,将逻辑重用的一种方法,而继承,则是将类重用的一种方法。

比如下面我们要说的VIP系统,VIP有3个等级,VIP1,VIP2,VIP3,普通玩家是player,VIPLevelOne 是VIP1级用户,他们有相同的基础属性和方法,但是如果我们不使用继承,会是这样。

重复的代码

作为一个程序员,我们必须有基本的修养,眼里不能容下任何一粒沙子,相同的代码就是沙子。如果使用继承,我们完全可以重用代码,VIP用户也是用户,他可以通过继承获得用户player的全部属性和方法。

继承直接获取属性和方法

除了代码的重用,继承更常用的一个用法就是扩展类。为什么要扩展?我们看下下面这个场景。

有时候,你加入一家心仪已久的公司,上头交代一个任务,准备就绪,开始撸代码,突然发现,你需要使用一个方法,然后这个方法的最上面有一行注释,写着 “作者 XXX 20XX年 创建”, XXX就是你的老板,这时候咋办,你去改你老板写的代码?先不说能不能改,这个系统已经跑了很久了,你把它改了,万一出了问题,那不是开除走人就能解决的了,万一造成大面积的系统崩溃,可是要赔钱的,你真的想删库跑路么?。。。

就算能改,你是瞧不起你老板么?他老人家的代码你也要改?你以为你是谁?

改嘛~不敢~ 不改嘛~任务完成不了怎么交差啊,这时候,继承的特性就派上用场了。

我们完全可以不去改这个类,而是用另一个类来继承他,当我们继承一个类的时候,除了获得这个类的全部属性,方法和构造器的使用权,还可以自己写同名属性,同名方法,这样我们就可以在不改变原来老板写的代码的情况下,来 “修改” 这个类了。关于这个特性我们后面章节详细说。

vip 系统介绍

写代码之前,先要弄清楚 需求 ,需求设计可是需要在写代码之前完成的。

玩过游戏的同学都知道,有个大厂的游戏,充钱越多,越牛X。如何牛X?

确认下眼神

确认过眼神~~是充过钱的人~~我把你举报~而却封我的号~~

这就是VIP的气势,自带气场光环,不服不行啊。

我们看看你要充多少钱才能成为VIP。

VIP充值金额

每个等级的VIP可以获得的服务是不同的,等级越高获得的服务越牛,简直就是给你开了官方版外挂。外挂太多,我们挑几个看看。

VIP专属权限

我们看了系统需求,来看看我们如何把他抽象成类,如何设计这个VIP体系。

vip的继承设计

首先最基础的是玩家,就是Player类,然后我们的VIP1直接继承Player,VIP2拥有全部的VIP1特权,并且有自己新的特权,VIP2继承VIP1。同理,VIP3继承VIP2。这样,我们就可以使用继承特性完成三个类的创建。

VIP的继承关系

从这个继承关系看到,java里的继承只能有一个直接的父类,这就是所谓的单继承。只能有一个直接的父类,就是说可以有多个间接的父类,父类的父类就是间接的父类。直接父类只能有一个,而间接父类可以有多个。

封装

这里有必要先讲一下封装的概念,我们后面介绍继承的时候,要使用到封装的知识。

在很久以前我介绍java语言特性的时候就稍微说明了一下封装的概念,比如我们很多网站或者app里面填写信息的时候,是不会给你直接填年龄的,而是通过你的出生日期计算出你的年龄,这就是封装。程序为了避免一些常识上的错误会将部分的功能对用户 “屏蔽”,用户是不能直接操作的。

再比如,我们在做项目的时候,肯定不是一个在战斗,而是一个团队协作的过程,在协作的过程中,你会发现各种各样的奇葩队友。一个大家都要使用的方法,专门安排一位 “武林高手” 去写,结果这位高手写的东西真的是惨不忍睹,如果用他写的公共方法肯定是BUG满天飞,到时候还得被批评自己的代码出问题。

怎么办?直接说啊,XXX你这写的什么乱七八糟的破玩意!别激动,这位高手的姐姐的姑妈的朋友的亲戚是你领导,人家是有关系的,你不给点面子?没办法,自己写吧,但是你写的要是被别人发现了,别人也要用你的代码了,这时候,封装就派上用场了,直接在方法前面加一个private,好了,只能在自己类里面用,这个世界从此安静了。

我们设计一个类的时候,有时候跟设计一个软件产品有一些相同的思想。我们对用户屏蔽不需要知道的细节,只留部分我允许的功能暴露出去。好吧说人话,用户虽然是上帝,但是有些上帝喜欢搞破坏,我只能开放一些指定的功能让用户去用,并且保证无论用户怎么操作都不会对系统产生破坏。

按一下就能起飞

再举个栗子,我们开车的时候,是不是只用按一下启动,车就开了?你需要把引擎盖打开,对着发动机一顿操作让他启动吗?发动机就是对用户隐藏了,而那个按一下就启动车子的按钮,就是对用户暴露的功能,我无论怎么按,车的发动机都不会被破坏。这个发动机就是一个私有方法,外部不可见。

访问修饰符有3个,private (私有),protected(受保护),public(公开),还有一种就是你不写,他会有个默认的权限 default。一般来说private 和 public使用最为频繁,而protected是专门用来给子类重写的。下面来看看这几个修饰符。

访问限制

关于继承的一些复杂的,绕口的规定我们下一章继续说。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-08-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码思客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Prowork 团队协同
ProWork 团队协同(以下简称 ProWork )是便捷高效的协同平台,为团队中的不同角色提供支持。团队成员可以通过日历、清单来规划每⽇的工作,同时管理者也可以通过统计报表随时掌握团队状况。ProWork 摒弃了僵化的流程,通过灵活轻量的任务管理体系,满足不同团队的实际情况,目前 ProWork 所有功能均可免费使用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档