00:00
那讲完这个继承还有修会以后呢,我们就可以做一些关于继承相关的一些问题了,那我们来看一下这个客户的这个实验题,实验题对应的就是我们这个问题,打开我们看一下。前面的话呢,我们讲过像bank呀,Customer account,这都是他们之间这种关联关系的,这道题里边呢,就涉及到这个账户,账户里边呢,又可以有账户具体的子类了,属于这个问题了,看下这个题目,那我们就按照这个题目这个顺序呢开始写,其实呢是有两道问题,先看第一个。说呢写一个名为account的叫类模拟账户属性构造器方法都给写好了,然后尤其呢,这里边儿有这个取钱和存钱的方法,那我们这块呢就来做一下,首先这块呢,我们再去新建一个包,这个包这呢我们首先呢去创建这个叫account account,然后呢,这里边呢提供了这样的三个属性,这块呢这个难度不大,我这块呢就直接来粘了,这呢是三个属性加上这个分号。
01:10
每个属性的话呢,我们在这声明一下,这个呢叫账号余额,这个年利率好,这个呢我们就选好了,那接下来的话呢,去提供这个构造器,构造器呢,里边有三个行参,正好呢是对咱们这三个属性的一个初始化,这呢我就直接来调一下咱们这个结构了,第二构造器,然后三个都选上,OK,这时候呢我就不删了,咱们也讲过这个事儿了,其实呢,你删不删呢,它都在这样个情况,OK,这呢是构造器,接下来关于这三个属性这块呢,首先呢提到三个属性的get的方法,然后呢,这两个属性的一个赛方法,没有这个。ID啊都有啊都有,那就是这六个我们都提供一下,这块呢,有呃,我直接来调快捷键也可以啊,点一下三个都选OK就行了,然后下边的话呢,涉及到叫获取月利率,还有这个存钱取线的方法,我们把这三个方法CTRLCL一下。
02:18
CTRLV粘过来,我们来完成一下,第一个呢,叫返回页利率利率,那咱们现在这个银行的话呢,这都不是这种复利的关系了,就是年利率知道了月利率就直接除一个12就可以了,所以呢叫annual interest rate直接除以12。这呢就相当于是这个月利率就可以了,像这个利率呢,在嗯前几年就是p two比较火的时候呢,这个年利率都能达到10%甚至更高啊,那时候呢,确实挺夸张的,这个咱们也有些老师呢,就把这个钱呢,也是放到这个p two p里边了,然后呢就没有然后了,就啊后来就找人家这个就没了,但是这块就在等着这个结果怎么处理呢,是吧,行,这个呢,咱们接着看下边这个情况,下边这块呢,就是叫取钱,这个呢叫存钱。
03:18
那取钱取这么多这块呢,看关于这两个方法有没有一些说明啊,他这块倒没有具体去说,但是我们通过这呢能看到,就是当你要钱不够的话呢,叫余额不足,那我们这块呢,也做一个判断,说如果呢,我们此时的balance呢是大于等于amount的,那这呢就够你去取钱,我们就balance啊就简等一下这个amount行,这个呢里边我们就不做输出了,这个也可以呢,这呢我就写个return了,然后直接在这块呢,就表示的你是不够的情况,不够的时候呢,我们直接输出个语句叫余额不足,诶这样呢就可以了。这呢是叫取钱。
04:05
行,那下边这个叫deposit是存钱,存钱存这么多,那这呢我们也可以去判断一下,这个你不能写一个负数,Amount呢,它得大于零,这个呢,我们就在原有的balance基础之上加等于一个amount。这呢就要存钱,存钱呢这块也没有明确说我存了有一个提示说成功啊不成功啊,那我们暂时呢,就先写成这样行,这个类呢,我们就写好了,写好以后的话呢,这块提到一个测试,那这块测试呢,我们把它CTRLC粘一下,我们就在创建一个测试的类,关于账户的一个test。CTRLV粘过来。行这呢,就做这样的几个事情。
05:01
写一个没方法说呢,创建一个count账号,余额利率都写好了。等于new一个account out斜杠一下这个ID1122BALANCE2万,然后利率零点零四五百分之四点五,对啊,这个利率还是很高的,嗯,那接下来的话呢,我们通过这个账户呢,去存钱取钱了,那我们就A点做一个withdraw先呢取3万。3万取完以后的话呢,叫打印余额,我们呢,就out一下这块呢,这个叫您的账户余额为。诶这样加上我们就a.get一下这个balance啊,因为我们这呢有个这个get方法,行,这是一个,然后接下来又取了2500,这个呢,你把它复制一下C下的复制2500,然后接着呢存了3000a.sit存了3000。
06:12
行,然后接下来呢,再打印这个余额,把这个语句呢,Control下,在alt下复制一份,然后接着呢,再打印月利率,月利率这呢,我们是一个返回值的,那我也是做一个输出,说月利率为。加上a.get一个叫monthly interest rate,但是这时候的话呢。啊,他这也没处理,这时候呢,你看是直接这样写的啊,你可以加上个版号也行,那你就可以把它呢,加上一个括号,先让它去乘以一个100,然后呢,再加上一个百分号。这样就可以了。行,那写完以后呢,我们执行OK,这样呢就出来了,第一个余额不足这个呢,是他这个是这个这个这个看跟他这个要求是不是一样,余额不足账户余额,账户余额利率行一样的,这是加个换行而已。
07:09
行,这个没有问题是吧,嗯,这块的话呢,其实跟我们说的这个继承性呢没啥关系,目前然后接着呢,我们往后看,这时候才有关系了,说创建一个count类的一个子类叫做check count表示呢叫可透支的账户,你可以理解为就信用卡一样,说该账户呢,定一个属性叫它代表呢叫可透支的限额,在check可account的重写照了,因为这时候呢,你有可透支这样的功能了,这个方法呢,付类中呢,就不能满足你的需要了,我们就重写一下,行,那这我们先看到这儿的话,先给它这样吧,先粘过来CTRLC。叫check count,新建一个类check。Account,那这个信息呢,我们先粘过来CRV稍微有点长。
08:04
好,这个我们来去完成,首先呢,我们让这个check account呢去继承于咱们的这个叫account在同一个包里了,所以呢,这块就不用你再去写inmart了,刚写完呢,这块就报错了,报呃报错的话呢,我们也关注一下这个错误什么信息,所以呢,你这时候呢,修这个负类中呢,这个count呢没有定义,空仓构造器没定义,这呢又是我们当前这里边构造器的一个默认选择,这就出问题了。那会说过这个事儿对吧?嗯,对,我们这里边呢,是一个带餐的,而我们这时候呢,是一个super,呃,是一个默认空三,空三里边又掉super空了没有就错了,这呢,咱们就写着的时候呢,去解决这个问题啊,那首先呢,这里边儿提到一个属性叫做overdraft,这个叫透支的限额,我们可以给他声明一下,加上私有的也可以private double类型的overdraft叫可透支限额。
09:01
行,接下来的话呢,我们去提供一个构造器,这时候不得不提供了,要不这个错误解决不了,那我们这时候呢,解决这个问题呢,其实有两种方式。一种呢,是不是把负类中提供一个空参构造器啊,对,你提供了这块呢,肯定它就不会爆了,另外一个呢,你是不是去调负雷中指定的那个构造器啊,对,那在咱们这个题目中,因为account人家没说让你去调一个造一个空三构造器,所以咱们这块呢,那就诶这个调人家那个指定的构造器得了,所以这块呢,我们就得这样写了,Public叫check和account,那我们调指定那个构造器的时候呢,你顺便呢,可以把这几个属性呢,都给做初始化了,那不妨呢,我们在这里边呢,就写上这样的几个属性,那我可以呢粘一下。把这几个呢,CTRLC。粘到这儿,然后呢,最后再把咱们自己的这个叫overdraft。再也做个初始化,哎,这里边呢,你直接上来就修就可以了,这块呢,你直接out斜杠一下。
10:02
啊回遮回遮回遮其实比较爽是吧,那然后接着再把你自己的这个属性叫z.overdraft啊附一下这个值啊,因为呢,跟我们这个擎参呢这个名一样了,所以你必须加上个S点了,OK,这呢是构造器搞定下边,下边的话呢,就涉及到我们去重写这个。这块成测试了,就是重写我们这个叫with照的方法了,重写方法咱说过了,要不你就直接在那写,叫with照out斜杠,这样呢去重写,或者的话呢,你就这个给他粘过来也行啊,这都可以with绕这块呢,大家就不陌生了,它相当于呢,默认我们写的这个方法呢,直接就掉了一些父类中这个被重写的那个方法了,这块呢,咱们就先删掉,此时的话呢,我们做一个取钱操作呢,它就可以有更多的选择了。比如说呢,这个先看一下你这个账户,这样大家呢,如果要有一个这个信用卡的话呢,呃,信用卡里边也可以去存钱的。
11:00
比如你这个1500块钱,这是你自己的,然后呢,你这个可以透支呢2万,哎,如果这时候呢,你想花这个500块钱,这个是先从哪考虑啊。多对,先从这个一千五这块考虑,就是这块呢,当你不够的时候呢,再从这块考虑,那那这块呢,咱们也是这样的一个思路,所以首先呢,我们这个来判断一下,说如果呢,我们这个balance,但是此时的balance呢,你要小心一点,负类当中权限不够,不能直接这样掉了,那怎么办?Super克也不行,Super克呢,解决的是你这个此负类冲突的问题,它可不能给你解决这个封撞性的问题啊对,是不是get方法了,说如果呢,我们get一下这个balance,前面省略这点了,你要是大于等于我们的amount。那就说明呢,这个本身你这个账户的余额呢就够,那我们这时候就可以直接用账户的钱来减了,有同学呢,这样写特别特别特别烂,这样能不能写这这这啥呀,这是吧,这不行啊,你们说说盖balance拿到不就balance吗?我这不就相当于balance简短一个count吗?你这时候的balance简短一个count balance减个account balance其实体现的是一个赋值的一个过程,你给人家减等于负了个值把,就相当于是这个事儿。
12:32
Balance等于balance这个减去这个amount,你是把这个得到的结果重新赋给一个值,赋值这个事儿呢,其实像set的功能,你这个只有获取的功能,这可不能这样整,这是绝对错误的啊,这个大家呢,凡是这样写的话呢,这个得好好反思一下这语法上的一个问题。那这时候呢,怎么处理啊,有同学说用set set呢可以,就是set balance。
13:02
那,那怎么写里边啊,Get balance减去amount。可以吧,可以的,就是比如说你这里边有1500块钱,你现在想取500,那就这一千五减去500,你还剩1000块钱,就是重新相当于设置了这个呢,是这个算是方式一还可以怎么办啊对,咱们附类里边呢,写了一个V。我是不是可以直接调负类的叫WITH6边把我们写进去啊。你看负类这个vce里边不就相当于是也是这样做了一个减法。这是可以的啊,这是这是可以的,所以这两个方式都行,有的时候呢,我们这个就不提供这个balance的一个set方法了,这个你要小心一点,正常来讲的话呢,我们这个银行卡你造好以后,这个一开始的话呢,就是这三个属性,我们在构造器中呢,都进行一个初始化,初始化完以后呢,像你这个账号啊就可以换,然后你的这个年利率啊也可以换。
14:08
但是通常的话呢,我们这个余额的话呢,你可以get看看你还剩多少钱,但余额呢,你不能再重新设置了,你只能是通过这个存钱取钱的去让这个变化。所以有的时候呢,就不会提供这个set方法了,如果要是把这个set方法干掉了,这时候你得注意了,那你只能是这么着做了,或者还有一种方式,那你就得改权限,你把我们这个account这个权限它改成protected。对,只让它这个子类能够看得到感,Protected也可以就得这么着处理了,行这块回过来就大家呢,这个解决问题的思路呢,要打开,然后呢,这是你够的情况啊,就是余额就够。余额就足够这个消费消费,然后现在的话呢,就是余额不够了,那这呢,我们就得写一个else了,Else呢就是余额不够,不够的话呢,怎么办,你得看一下你这个是不是透支额度够不够啊,透支额度够不够,所以我这呢,你写个else也行,或者我直接你再写,又得在里边又得写衣了,又得写个嵌套了,我就这块加一个if服了,这么着,凡是你能走到这的,那一定意味着你余额是不够的,余额不够,在这种情况下,如果我们发现叫overdraft,这个怎么判断。
15:37
大于等于,对,这时候呢,就成amount先减去一个get balance了,这么着。大于等于它盖balance,呃盖balance这个你要呃担心这个权限的问题的话呢,你就可以呃担心这个优先级的问题,可以加个括号。其实不用。其实不用,呃,因为呢,他要是先算前面这个算出来是个布尔星,布尔星也不可能去减一个数了,所以这呢,其实还是他先做运算,那就是说我现在呢,想取你账户呢,有1500块钱,然后能透支2万,然后我现在想取这个2000块钱。
16:16
2000块钱,这时候呢,2000块钱呢,这不够了,先把这一千五先取完。取完以后呢,还差500,然后再从这里边取,所以呢,就是2000呢,减去一千五之后,剩下这个差额,看看overdraft呢够不够。这样一个情况,那这个时候呢,就相当于是透支额度足够消费,透支额度加上咱们的这个叫余额足够消费,那这时候呢,我们怎么写啊。看同学这样写的,首先呢叫site balance,对对,先把我们这个钱呢先取空,相当于你就是把你这个余额呢先吃成个零,或者说你用with照也可以,就是咱们上边这个方式一二选一个就行,然后的话呢,叫overdraft,让它呢叫减,等于看看还差多少钱,说呢还差这个amount减去get balance这么多钱。
17:14
这样写。有没有问题?你说没有,你说反了。下面应该对这个位置其实很容易出错。就是跟大家这个生活中的想法正好有点不太一样啊,你说我要取2000块钱,然后你这个余额不够,然后我就先把我这一千五先取光是吧,取光了,取光以后呢,再从这取500,取500,你注意你这时候写法是这样写的是2000你已经set成零了,Get的候这是不是就零了,相当于把这一千五取完以后呢,又取这个2万里边呢,又取了2000块钱了。长这么着了。所以这块跟咱们平时这个想法上,真正操作的时候可能有点区别啊,就是这个时候get balance,你别别忘了,就是你上边这块已经给他改了值了啊,那为了让他能够这个正常的能够执行,是不是颠倒一下得。
18:12
这个时候呢,非常容易出错,你只能通过测试才能够发现好,这个时候呢,我们就这样子来处理,这呢就相当于你还都够的情况下,然后再下边呢,那就真的也不够了,不够这块有一个说。这这也没没写是吧,啊超嗯,超过可透支限额。超过可透支限额保存,那就这样子来处理。行,这块没问题吧,嗯,没问题,然后这个位置呢,你也可以用咱们刚才说的这个with罩也行,With照呢,那就是把你这个balance是不是就全取完,就这样写也行,或者的话呢,你就写一个叫super.withdraw然后这写谁。这些多少是不是只能写盖balance?
19:06
就是取光呗,你有多少钱,我这个就取多少钱呗,所以这个呢,或者是这种写法,这要特别小心的就是这个修货可别丢了。丢了就坏事了,你就自己掉自己了,出不去了。也也也能出去,那就是你得取得差不多光亮的时候就跑这来了是吧,就当是是错误的,你就得掉这个胸廓才行。好,这个呢,Withdraw就写完了,存钱的话呢,还是用原来这个double就OK,然后我们下面来做测试check。Account的一个test。没方法行进来下边呢,这块提到一个具体的操作啊,CTRLC。
20:09
CTRLS好看一下说check count,首先呢,创建一个账号,Check count这样的一个对象,这个是我们这个它这里边的,然后count,诶new一个check count out斜杠,诶这呢是1122,余额2万。利率0.045,这个透5000。行,这个办了这个信用卡以后呢,总会钱是以为说这个钱就是自己的似的,就爱花,花完以后发现,哎好像不是还得还,嗯,成这样了,诶这块的话呢,我们就造了一个对象,造完以后的话呢,现在说去取钱了,Act点做一个withdraw取5000。那取完以后的话呢,这块呢,让您打印一下这个余额和可透支额度,这个看看他这咋写的啊,说您的账户余额是多少,您的可透支额您的账户。
21:15
余额为a.get一下这个balance,您的可透支额度为。哎,加上act点二,呃,Get一下,我们这个写的叫overdraft,这overdraft咱们没有写它这个对应的这个get方法是吧。那这块呢,我们后期还得补一下,这呢,因为你是个私有的,咱们得给大家提供一个这个盖的方法,在这个位置al shift s加上一个。好,可以了。然后回过来,这呢,我们就去draftt斜杠,这就可以掉了,那下面的话呢,再去取,这是18000,看这呢C下一再接着呢,取啊还取那再取三。
22:17
行,CTRLS没了。行没有了,那好,咱们咱们来测试一下,这是保存。行,这呢是您的账户为这是一万五五千,呃跟这个一样,然后下面呢,就是零两千,然后这个超过这个透支额度了,这块也取光了,就剩2000块钱了,再取3000不够了,那就还是显示这个情况,就第三个呢,就相当于是这个取钱这个失败了。那这样的一个情况啊,好,这个呢,就是我们这里边考察的这个问题里边呢,涉及到过这个关于这个修复的一个使用,我们呢可以调这个被重写的这个方法,行这个大家下来的话呢,把这个题目呢,再这个这个练一练啊像这个呢,我们这个就叫您是吧,就是现在稍微客气一点,就银行的话呢,其实相当于相当相对来说还是比较比较强势的啊,就是以前呢,出过这样什么事呢,就是你要在银行里边大家去取钱的话,你取到假钱了。
23:21
对,他是不承认的,你要比如说尤其从这个自动取款机取到假钱,你去这个柜台说说是假钱,他这时候他是怀疑你可能是自己整的假的是吧,所以他不会承认,但是呢,你要是出现你自己的问题,就是你这块你要是多挣银行钱了,他是需要你还的哈,什么叫多挣银行钱了,前两年忘了是哪一年出过一个事儿,就是那个自动取款机出问题了,那哥们呢,写了一个100,他能突出1000块钱。就是十倍啊,还是几倍的去吐钱,哎他诶这事挺好是吧,他又在那个取款机就疯狂的去取钱,然后呢,就取了很多钱,然后后来呢,这个摄像头就找到是他,然后让他把钱就还了,好像也给判刑了吧,说是就属于这种情况了,对,就是你没有发现这个取款局出问题以后呢,主动主动报警啊,或者你上交你这个非法的这个所得呀,是吧?哎,这就属于犯法了,成这种了,其实银行的话呢,还是挺能挣钱的,这个银行怎么挣钱的,先聊聊啊,你比如说这个银行呢,你这有1万块钱,假设呢,你这有1万块钱呢,是老板给你发的工资是吧,发完以后的话呢,呃,就拿到这样这样花吧,这个老板给你发了这个1万块钱,然后你这1万块钱呢,没有花,你就可以存到银行里了,存到银行呢,你这块呢,拿这个利息就拿比如说1%的利息,相当一年,一年下来的话呢,你只能拿到这个100块钱。
24:48
钱额外的利息,然后那个你把钱存到银行以后,银行拿着钱呢,这老板呢,给你发完以后,钱还不够,他就把这1万块钱又取出来了,取出来以后呢,他这时候可能至少得5%的,这个对他从银行去贷款嘛,怎么也得5%了,中间呢,就差出来这个四个点,然后他把这个钱贷完以后呢,他就又去给别人去发工资,别人发这个钱以后呢,又又放银行里了,然后这老板还不够再去取钱,就银行在这就是空手套白狼是吧?诶事实上也确实是这样的,就相当于好像说这1万块钱的话呢,银行这样来回倒手都能倒大概十次,就相当于这1万块钱,他能当10万块钱去用,你中间你算一算这个中间的差值,相信他就可以,诶去挣这么多钱这样子的啊,但是你呢,想想以后呢,你也不能说那我开个银行,那就不用想了,你你开了银行也没人往你那放钱,所以有人就可以开一个所谓的p two p,然后开完以后的话呢,就黄了是吧,啊就成这种了,行这个呢是咱们说的这个课题。
我来说两句