00:00
好了,同学们,那接下来咱们来继续往下看啊,这个是关于我们上节课说的,这个叫做站。是吧?那么我们还有一个题目,这个题目呢,可能比较难一些了啊,就是第二题是吧。为某个酒店编写程序。酒店管理系统模拟订房、退房、打印所有房间状态等功能。那么这个呢,咱们来看一下这个题目啊,这首先呢,我们这边啊,嗯。这样再新建一个类嘛。这个我们叫hotel。Hotel。是,是这样写吗?是这个吗,各位。他要是这个吧。Management system。好啊。
01:00
呃,酒店管理系统啊,这个是。缩写MT啊。System系统系统。来。为某个酒店编写程序,酒店管理系统模拟订房、退房。呃,还有这个叫做打印所有房间状态等功能,是不是,那么这块呢,我们先写一个类啊,叫做酒店管理系统。然后这块的话,我们有一个什么呢?嗯。主方法啊,有主方法。那么这里有有有哪些对对象,各位有哪些对象,是不是有一个房间对象啊。是吧,啊,有个房间对象,另外的话大家注意,我们如果是进行酒店管理的话,那这个酒店它应该是个大厦呀。
02:04
是不是?想想。这一层吗?这第二层吧。对不对,哎,第三层。对吧,哎,第四层。是不是每一层上是不是有很多房间?对不对,哎,这是一个房间,这是一个房间。对吧,这是个房间吗?哎,这是个房间,所以这是个什么呀。二维数组吧。二维数组里边每个元素存什么呀?Room对象吗?是不是房间啊,房间对象啊啊。所以这块呢,咱们首先呢,先在这儿定义一个类。先进进行提取啊,这个类呢,我们叫room吧。这个呢,其实就是什么呀,就是我们酒店的房间。那酒店的这个房间它有哪些属性啊?
03:00
啊。有哪些属性啊各位。房间编号吧。哎,我们叫room number或者是。房源编号。房号还有啥?你们都写了啥?房间类型行吗?哦,还有房间状态。房间状态的话。是否空闲是吧?不玩了行呗。Status行不行,哎,这单词是状态呗。是不是啊,那这个呢,其实就是房间编号了啊,这个就属于房间类型。是不是啊,这个就是房间房间。这个是否空闲啊,或者房间这个状态。
04:02
房间编号的话,你就可以设想一下,比如说一楼,二楼,三楼。是不是,哎,一楼这块你就比如像101啊,102啊,103啊,104啊,105啊106啊类似的二楼的话就是201呗,啊类似的202是吧,203204。204205206,哎,对吧,哎三楼301302303304305306。306。对吧,哎,类似的这样的一个编号啊,大概那房间类型这一块的话,你比如说有标准间呀,对吧,有这个呃,单人间啊,有这个比如说豪华间啊,对吧,哎,类似的或者总统套房是吧,总统套房。
05:03
啊,那么下边这个状态这块呢,你你就可以给他设定一下呗,对吧,哎,布尔类型。嗯。不二类型这块的话,你假如说你规定一下true。表示空闲呗。对吧,啊,房间可以被什么预定。False呢,表示占用呗,对吧,房间不能被什么来预定。你可以规定啊,你说有的老师我用一和零行不行,我用一表示啥零零表示啥,那行啊,没问题啊,你自己定啊,一表表示占用了这个房间,零了就表示这个房间空闲,那你可以没问题啊,没问题你也可以采用不玩类型,True就表示这个空闲呗,这样说false呢就表示这个。呃,占占用了对吧,房间不能被预定,False不能被预定啊,这就大概的属性私有化,然后你1111个套路就都得有吧,加什么。
06:05
Get的方法不?是不是得加上?对吧,哎,但是大家看啊,塞盖的方法,这个布尔类型钙的方法叫is。看见了吗?就idea工idea工具啊,它对这个布尔类型这一块。这个变量,它生成的这个钙的方法叫E,我不喜欢E啊。不喜欢意思吗?注意啊,Idea的事儿啊,Idea工具对于谁啊?对于布尔类型的变量。啊,生成的get方法的方法名是什么?是is某某某啊。啊,如果你不喜欢。对吧,你不喜欢可以修改为。可以修改为啊。
07:03
哎呀,我的天呐。嗯。什么情况修改?喂啊,可以修改为get呗。对吧,哎,Get某某某嘛。那我就不喜欢这个啊,有同学可能喜欢,有同学可能不喜欢。你不喜欢你就改一改,喜欢你就用无所谓啊。Get standards啊,这是获取状态的,这是修改状态的吗?这是不是获取类型的,这是不是修改类型的,这是不是获取房间编号,这是不修改房间编号的对吧?你你你属性私有化对外提供set盖的方法,另外你out加insert构造方法,你不得提供午餐的吗?对吧,构造方法你不得再提供一个有参的有同老师为啥这样写。没有为啥。盲目的屁股归定就是这意思啊,构造方法上面是不是属性啊,下面是不是构造方法,再来一个,你看有参的无参的都有,都给他给上。
08:10
下边是什么and什么,哎,Get方法。啊,Standard和get方法。好了,那这个是咱们的set get方法啊,行了,那这样的话,这个room这个类你就写完了呗。对不对,哎,Room这个类写完了,按照我们以前来说是不是哈code,呃,是不是这个E和two都得重写啊。啊,就是就是equals方法和equals方法重写,是不是我们的to论方法以及重写。有同学说为啥为啥为啥,老师问我为啥王八的屁股规定,你只要是写了一个类,你这个类按说就应该去重写ECO算法,你就应该去重写什么呀,论方法。应该去重写。你明白吗?
09:01
不明白是吧?哎,不明白应该是不明白啊,老师,我为啥要重写啊,我现在又没用规矩,JA法中规定的,你写了一个类之后,你这个类的equals方法你要干啥?重写to string方法你要干啥?哎,重写。是规定的啊规定的这是一种编程素养,这是一种编程习惯,这是一种编程素质啊素质,不管equals用上还是用不上,或者说方法用的上还是用不上,你都应该去怎么着啊重写。啊,都去重写这个方法,因为你要不重写S,也不重写to的话,你想一想它默认继承的是谁object呀,你object这个类里边的方法和方法。是不是都是有一个默认的实现,而这个默认的实现是不是不够我们用。这个equals比较的用双等号内存地址,我们在实际的开发中比较两个对象是否相等,不应该比较内存地址对吧?应该比较的是什么是内容,所以你这个equals方法对于object来说对吧?哎,我们如果子类继承的话,我们子类里边这个方法是不够用的,包括我们现在在这个地方,你可以看到有个方法叫做什么呀,叫做to string,来找找,找找,往下走,往下走,往下走在哪呢?
10:18
嗯。 CTRLf12。注意啊,我教大家啊,在这个类里边,如果东西太多的话,你想快速的定位某个方法,或者某个属性是 CTRLf12啊。好,有个叫toth string的,你点过去,它默认的这个toth string方法大家还记不记得,它有一个艾特符号,它输出的是一个对象内存地址。我们S公司说这个突斯顿方法的目的是为了干啥,还记得吗?图论方法的目的是把一个对象转换成字符串的形式。对不对啊,是不是把一个对象转换成字符串的形式啊,它设计这个方法的目的就是为了把对象转成字符串,那转换这个字符串是不是越简单明了?
11:01
越好啊,你输出一个对象内存地址是不是不太合适?所以object类的to string方法给的默认时间也不够用,我很早很早以前就说过。如果父类里边写的这个方法不够我此类用的话,我此类应该干啥重写对吗?我是不是可以考虑把这个方法复制一份,在我此类里边,在这个room里边,我是不是可以考虑重写一下这个这个图方法,至于说我重写这个位置,我写成什么,那你决定啊,你觉得你的房间对象要输出的话。或者是你把一个房间对象转换成一个字符串的话,转换成什么样的字符串你自己来定。你自己来定。啊,你自己定这个事儿。明白什么意思吗?啊,那么你认为两个房间如果什么一样的话,就表示是同一个房间。那么你自己定。
12:01
你自己定这个equals也是你自己定的。一是用来比较两个对象是否相同的。至于怎么比较,这个还是程序员自己定啊,程序员自己定。你认为两个房间的编号相同,就表示同一个房间?那么你写代码比较房间编号就行。明白吗?你这个突顿方法的目的是啥呀?突顿方法的目的就是将Java对象转换成字符串。形式怎么转,转换成转换成什么格式。
13:01
程序员自己定明白吧,目的就是简单明了。简单,清晰明了。那你比如说我就这么我就这么转了啊,我我写个中括号吧,假如说我写个中号,就这不是必须的啊,就是双引号括起来的字符串,各位啊,中括号比如说嗯,这个是101房间是吧,单人间对不对,目前是占用。对吧,哎,或者说。啊,102房间对吧?哎,单人间目前是什么呀?是空闲对不对,诶你看这个可读性不是好点嘛,这这这这假如说将来我有一个房间对象的话。对吧,我调用房间对象的to顿方法,你把这个房间给我转成这种格式。我不喜欢看对象内存地址。明白吧,就是我不要看对象内存地址,我要看什么呀,看具体的信息,那你得重写这个兔子润方法,你如果这个方法不重写,调的就是负类的兔子润方法,负类的兔子润是不是一个内存地址啊。
14:20
这个是不是不够简单,不够明了,不够清晰呀,所以是不是你此类才需要在这重写呀,重写之后这个方法将来是不是调你重写之后的这个方法,以前父类里边方法是不是就不掉了,对吧?这就是方法重写的意义吗?这就是方法覆盖的意义,子类去继承父类重写类的方法,对吧,将来走的是这个。对吧,那现在你不能写死啊,你写成102就写死了,你写成单人间就写死了,你写成空闲就写死了,那你这个你这个房间到底编号是多少,那有啊,这不就是房间编号吗?你这个房间类型是有啊,这不房间类型吗?哎,房间状态处就表示空闲呀,False是不是就表示占用啊,哎,你可以在这里做嘛,对不对,你可以,你可以把这个代码给它转换一下,变成动态的,上边是不是都是写死的呀,是不是写死了啊,那怎么动态呀。
15:16
你要动态的话,那你房间编号是谁呀?就拼串就行了,对吧?哎房间编号是谁?哎房间编号就是房间编号呗。对吧,Number吗?杜老师之前怎么讲呢?把一个变量放那个字符串里,口诀还记得吗?把一个变量塞到把一个变量塞到一个字符串里边,怎么做还记得口诀?把一个变量塞到一个字符串当中。口诀。口诀是啥?加一个什么。双引号是吗?双引号中间加什么。
16:04
双引号中间加。两个加号是不是。两个加号中间加什么?变量名吧,口诀啊,加一个双引号,来这个删掉啊,看好了加一个双引号。双引号里边加两个加号,两个加号中间加个变量,这个不就是房间的类型吗?单人间,豪华间什么什么标准间,这是不是房间编号啊,这个空闲不空闲那处就表示什么呀。就表示。空闲呗,你看这不规定吗?处表示空闲,那妥了,那这个应该怎么,到底是写占用还是写空闲,你这边能不能用三步运算符。加一个双引号,加两个加号,加一个括号是吧,哎,来。这个状态如果为true。
17:00
就表示什么呀。空闲呢?其他情况是不是就是占用啊,这是不是三目运算符啊,这个是不是就是房间状态啊?好,大家看这个是不是房间状态,如果为true,是不是就是占就是空闲,如果这个是false。是不是就表示占用啊。对吧,哎,你可以写一个临时程序测试一下啊,编写一个临时程序测试一下。啊,一会儿可以删除这个闷方法,因为你这个程序一般闷方法只有一个,你在酒店管理系统里面写了个闷方法,你在别的地方就不应该有闷方法了,这个闷方法只不过在这简单测试一下,你可以测试一下room room new room是不是,哎,这个room new的时候,那你new呗,你调构造方法,这不就构造方法吗?来,这是构造方法。对吧,哎,来编号类型和什么状态,你你你你你扭一个啊编号是101房间嘛,就假如说啊101101房间是什么呀,是单人间吧,假如说啊,然后呢,101这个房间它的这个状态处。
18:10
空闲对吧,那你点out,输出room.to。Room对象去调to string方法执行的是这个,这个是不是会返回它,所以在这里你输出的你看看,如果这个是处是空闲啊。你看101房间,单人间,空闲。是不是,哎,你把这个房间再复制一下,如果改成false的话,诶,你看看它这个to string方法是不是。变成了占用。再执行啊,我们再看一下,你看用吗。对吧,这就是to string方法,好,还有一点我强调了N多遍,Toth string print line输出一个引用的时候。
19:01
是不是它会自动掉to各位room是个引用对吧。对不对?Print烂,就是你的记性再差,我在你的耳边像磨茧子一样,叭叭叭叭每天给你磨是吧?你是不是也应该有一点点印象对吧?Print LN这个方法输出引用的话,会自动调用什么引用的什么to string方法吗?是不是,所以你上面这个呢,你就不用写了,你再去执行这个程序,你看。它输出什么呀,还是这样的呀。因为什么呢?因为它自动会在这掉兔子顺啊。对吧,你不写他也掉,你输出的是room吗。如果你这个方法不重写呢,各位。这个方法如果不重写,那么这个输出room的时候,这个room这块是不是就是调的负类的这个图方法输出的是不是就是内存地址啊。
20:05
你看看输出是不是一个对象的内存地址。你看,Com,点北京加Y,然后homework room,然后艾特什么七二,这是一个对象内存地址吧,我们要的是这个吗?我们要的不是这个。我们不想要输出一个引用,输出内存地址,我们想输出一个引用的时候,我们输出一个字符串,所以现在你可以重写to顿,你重写to顿它就会掉你这个方法。啊,就会调你这个方法啊来走。嗯。看见了吧,哎,是这样的。好,这是一个方法,测试完毕。测试完毕啊。这个注释怎么注释啊,CTRL加shift加斜线。多行注释啊,Control加shift加斜杠。
21:06
查看一个类的。属性和方法是CTRL加F。12。比如这个啊,CTRL加F12。是不是都有啊,你看对吧,列出来了。你先切到这个肋上啊。来切换alt加箭头你看。是吧,哎,切到这 CTRLf12查看有哪些方法啊。我昨天写了一个账号密码的问方法在酒店里。用测试类调了半天没调出来。行了,那这个equals你也可以重写啊,你用上用不上你都要重写,明白吗?Equals用不上用用上用不上都得重写,重写你切过去啊,Object在里面CTRLF实际上找找equals。
22:03
是不是这个方法走equals这个方法,那比较是对象内存地址吧,是不是我们不应该比较内存地址,应该比较内容吧?来把这个方法写一下,怎么写,如果怎么着,OBJ等于等于空。是不是之前写的代码?啊。或者说什么叹号吧,OJ of什么呀。它是空,或者说它不是一个房间,那return一个什么就行了。False呗,如果Z等于等于obj内存内存地址都一样,那return true就行了。那再往下呢,你OB这是不是要强转呀,转成什么呀,转成room啊,你不转room怎么调啊。对不对,哎。那如果说我们this.number是不是房间编号要等于等于我们room的get number的话,好,我问大家是不是表示房间编号相同?房间编号相同,是不是代表同一个房间在这儿return false?
23:09
对吧,当然我们之前讲ES的时候,是不是这也说过这个可以直接return啊。对,直接。return.number等于room叫get number。这不就是那个房间对象吗?把那个房间对象的编号拿出来和我当前房间吗?你可以调get number吗?能吧,都可以,This是当前的房间对象。调你get number是拿的是当前房间的编号。Room呢,Room是你这个参数啊,你obj是不是转成room了。所以room掉get number不就是这个房间它的编号吗?对吧,你你你。对吧,这句话是。叫当前房间编号。
24:02
等于。传过来的房间编号。传过来。的房间对象的房间编号。认为是同一个房间。房间编号为什么能用双等号比较啊?因为房间编号的类型是int呀。Int比较能用双等号啊,所以这边用的是双等号啊。对吧。你可以再继续往下测试。对吧?哎,怎么测呀,你这里拗了一个房间。对不对,那我可以再一个房间呀,Room room1。你什么?这个房间呢,我再拿过来。
25:00
放到这。那我入。点E1。这个结果是出还是?Room调你这个方法,那你那你这个room调这个equals方法,那这个this是不是就是指的room啊。你调ES这个方法是不是这里有个参数,那么将来这个参数是不是就传给了OBG啊。OBJ是不是转成了,是不是就是它呀。所以this.get说的是谁?就是我们前面这个room的房间编号。啊,然后ROOM1是不是传进去付给了这个OBBJ啊,所以这个room。其实就是说的这个ROOM1。这个其实就是。这就是前面的这个这个面向对象里面这个这个this这个东西。你要是不理解,你就死记硬背,怎么背?各位,我教你一招,This代表当前对象,好,我问你这个对象去调这个方法,当前对象是谁?你觉得当前对象是谁?
26:07
你觉得当前对象是谁?各位?你这个对象要去调这个方法,你说当前对象,当前对象是不是这个room。那我说了,This代表当前对象,这个this说的就是谁,不就是room吗?Room和这个ROOM1进行比较,ROOM1是不是调这个方法传进去的参数,你ROOM1是不是付给了这个ES方法的这个obj呀,你obj转成room之后,Room调get number不就是房间编号吗?你这个房间当前对象的房间编号和这个房间编号相等的话,就代表两个对象相等啊。对吧,你这个当前这个this的get和room的get number,如果房间编号相等的话,我认为是同一个房间嘛,所以这个是101,这个是101,那么我们来看这是不是处啊。这两个房间就是同一个房间吗?对吧。啊,是。那如果你的房间编号是102的话,那对不起,那咱俩根本就不是同一个房间,那这个结果就是放。对吧,你一下你看是不是。
27:02
来,你看false吧,就表示不相等啊,两个房间不相等啊。那至于说你将来会不会加别的规则,那你自己定。你说了啊,你说房间编号这个东西相等,并且类型相同,我才认为是同一个房间。那你可以改,可以把这块的业务改一下。对不对,哎,感觉题目的思路我都理不清了。哎。为什么理不清了呀?各位我再说一下啊,这个是要回顾一下的啊,这个不回顾不行的啊,前面有些同学都忘了。要回顾一下的,就是说我们现在这个room这个类里边有三个属性,属性构造方法,无参构造方法,有参再加set方法,Get方法加上去,再加一个to论方法,加一个equals方法加上去,这是一个基本功啊。这东西是要写的啊,要写上,还是那句话,这个写还是不写无所谓,你你不是不是无所谓,这个写还是不写,这个东西你要写上,明白吧,你得写上,你写上将来掉也行,不掉也行,无所谓,但是你必须得写上,听明白了吧。
28:11
啊,方法怎么着。方法,不知道怎么写。哪个方法不知道怎么写啊。声称可以啊,没问题没问题啊,诶各位啊,现在酒店管理系统,我现在只是说了一个room啊,这个room类属性私有化,你下面构造方法无参有参,还有你这个set get方法这一块,你是不是有这种意识,你能不能给他写出来,包括ES方法你能不能给它写出来,包括突出的方法你能不能给它写出来,你用它写出来。这个to string和equals,你用跟不用都行,咱们倒要写,写出来以后万一用得上呢?
29:02
是不是?
我来说两句