00:00
呃,我们刚才呢,说了一下接口在开发中的一个作用,但这个呢,只是从理论上思想上跟大家说一下,我们中午去饭馆吃饭,这个过程有没有接口啊,有的哪个呀,菜单。是不是那菜单这块呢,它其实就是个接口。啊,就是个接口可以这个菜单呢,可以降低什么呀,耦合度,那么降低谁和谁的耦合度呢?降低我们这个叫做厨师。和我们顾客呢之间的一个耦合。啊,可以降低这个耦合度,来,我们可以写一个例子来看一看啊。尝试去写一下啊,在接口在开发中的作用,我们这边首先先定出来这个饭馆的这个这个菜单。行吧,菜单啊,比如叫food menu。好,大家看这个呢,其实就相当于是一个什么呀,哎,是一个接口吧,哎,接口菜单接口啊菜单。抽象的啊,抽象的。
01:03
Public interface food menu。啊。那么这个food menu呢,这块呢,我们呃是一个菜单,菜单里边有什么菜呢。咱们就。写个啥呢?就叫西红柿炒鸡蛋啊。柿子炒鸡蛋。柿子。炒鸡蛋。哎呀,这名儿啊,叫柿子炒鸡蛋。呃,再来一个鱼香肉丝,鱼香肉丝诶。啊,这个可能就是那个叫西红柿炒蛋,然后呢,这个呢,就是鱼香肉丝。啊饿了啊饿了到点了是吧,那么这个菜单有了之后呢,这个接口有了之后呢,他这个。
02:06
怎么说呢,嗯,有什么呀,有这个顾客是不是,哎,这是不是就是那顾客呀。对吧,哎,还有一个啥呀,哎,有一个有厨师啊。是不是,哎,有厨师啊,那厨师呢,有有可能好好多个cooker啊,COOKER1。啊,一。这种类型吧,嗯,或者说是有中餐的这个厨师,还有西餐的厨师。行不行,哎,你比如说我我这边写叫。China cooker。行吧,哎,然后接下来呢,他还有什么呀,可能还有别的。嗯。嗯。中餐、西餐。
03:02
China厨师西餐怎么说呢?西餐这块的话就叫America吧。啊,Cooker啊,就就就这么地吧啊,举个例子而已啊。好了,那么这块呢,我们把这个这个这个这个这个菜单有了是吧?哎,这是一个。我们所说的一个客户。啊,这是顾客吧,啊顾客public class我们叫什么呀。好。那么这是什么呢?China cooker,还有这个cooker对吧?那这块是China cooker啊。这个是什么呢?就是中国厨师。Public class,我们叫China。Cooker。啊写一下,然后呢,我们应该还有一个叫美国厨师。
04:07
或者中餐西餐,西餐厨师啊,这是中餐厨师。啊,行了,那这边呢,这个厨师呢,肯定改一下西餐厨师America America啊,America就这么写吧,啊America cooker,那你只要是厨师啊。这个饭馆先不用管啊,先不用管,那再整个饭馆出来,咱们这个就。就多了去了,就太多了啊,就太多了,好大家看啊,我最初呢,是先把这个接口定出来。那么谁去把这个接口里边菜给做了呢?对吧,那对于我这个中餐的厨师,还有这个西餐的厨师,是不是都可以实现这个菜单上的菜呀。对吧,所以你看中餐厨师实现什么呀,菜单上的菜对不对,叫employs去实现food menu。
05:13
那。你西餐厨师?也需要去实现什么。啊,叫做food menu。那么大家知道,当我们一个类去实现一个接口的时候,就需要将接口里边的方法给它实现了,你现在编译是报错的,Java c先Java编译报错。啊,因为你America还有China cooker这两个厨师啊,都实现了这个接口,你就需要把这几个接口里面呢,哎,方法给它实现了,所以呢,这个时候你就强迫要求你。哎,你中餐厨师需要干啥,把这个方法写一写对吧?哎,然后呢,你需要把这个方法也怎么着啊,也写一下,同样你是不是应该在另外的一个西餐厨师这一块,是不是也需要去写这两个方法对吧?哎,你比如说这块啊。
06:21
这叫比如说西餐师傅啊,呃,做的西红柿炒鸡蛋。对吧,来system out打印输出啊,比如这边我就输出system out点打印。输入什么呢?比如说叫西餐师傅啊做的鱼香肉丝好了,那这样的话,我们呢,在我们的中餐厨师这一块也可以给他。对吧,哎,中餐厨师。
07:01
中餐师傅吧,啊,做的西红柿。炒鸡蛋啊。东北口味。啊,然后呢,拿过来这个。鱼香肉丝。东北口味啊,行了妥了,那这块的话,我们是不是就在这里,只要实现这个接口就行了。我们在这个地方也只要实现这个接口就行了吗?对吧,哎,所以说厨师啊,是接口的什么实现者。啊,这个同样也一样。厨师是?接口的实现者。最原始的接口在这放着,然后我们这块呢,是我们的一个customer顾客。
08:06
那顾客这一块,大家想一想,顾客跟菜单是什么关系?应该是顾客。手里。有一个。菜单对吧。注意啊,各位说呀,Has a menu。能不能说通?各位这句话什么意思?啊。Customer has a food menu。说是顾客有一个菜单。是不是啊,记住啊,记住以后凡是能够使用has a来描述的。
09:04
注意听啊,来描述的统一什么呀,哎,统一。以什么呀,以实例变量的,以属性的方式存在啊,以属性的方式存在。各位啊,我之前给大家提过一个东西,我说cat ISA,什么animal。但凡满足1A的表示都可以什么呀?哎,设置为什么继承。还记得吗?我现在说的是customer has me。但凡是满足has a的。表示都以什么形式啊,实例变量的形式啊,都以属性的形式。
10:02
存在。都以属性的形式存在,什么意思?在这里你声明一个什么呀,实例变量。实例变量或者叫属性啊,我们叫做什么呀,哎,Food。Menu。Food。好,大家看这个,其实我们很早以前是不是就见过呀。对吧,我们很早以前就见过。雨桐老师,我怎么不记得我曾经在类里面写过这么一个东西,见过呀,以前我们写过一个代码叫address吗?这是所有初学者的噩梦是吧?来user吗?这个user有什么呀?有ID啊,名字啊。对吧,哎,他还有什么呀。Address。家庭住址,这个住址这边有什么呀?有这个叫city street。
11:07
Zip code是城市、街道和邮编。现在把它作为一个类型写到这儿啊,做ADR吗啊。是不是,哎。其实很早以前我们就接触过这个,现在这个也一样的,在customer里面有个food menu。对夫妻那个就是非常典型的这种案例,这种案例,这种案例啊,就你要记住这里边儿不止。说你能有基本数据类型属性是int啊,哎,你还可以是address,因为这是一种引用类型啊。哎,我就是这个搞不懂。我说一下啊。这个现在困惑在什么地方?邓俊,我想听一听你的这个困惑在什么地方,就是这块,你感觉你的困惑在哪?
12:05
就这个困惑在哪,就是ID和ADDR里面保存的东西不一样,对吧,ID里面保存啥,可能100是个数字是不是。ADR里边保存啥?0X1234,就这么一个区别。如果你ad里边保存0X0X1234这样一个内存地址的话,这个地址是不是指向了一个对象啊,等于是。对吧。就这个东西好像学着学着也不是那么难了,你现在再想想。就是我一个类里边有一个什么呀,Address ad。这不类的引用吗?有点像类名,这就是引用啊,不是像啊,这就是引用啊。这个ad就是引用啊。这样写行不行,行不行,这个代码见没见过?各位,这个代码见没见过,这是new对象对吗?这是不是个引用啊?
13:00
这个引用是不是保存内存地址指向个对象啊。对象在哪?同学们告诉我对象在哪?对象在堆还是方法句还是站?对呀。对啊,在堆当中啊,这个对象在堆里边啊。哎,各位,我问大家个问题啊。你。你自己啊,对吧,比如说。Myself。我自己应该有一个朋友,对吗?Friend是不是?不加点儿吗?在哪加点啊。会建立一个方法,建立什么方法加什么点。这是个变量啊。
14:05
我说一下各位啊,这个呢,我再强调一下,是我customer里面有这样一个属性。我为了让大家去理解这个,我再把之前的东西再回想一下。这个和这个。你要加什么点,你要往哪加点啊。往这加点啊。这是个变量名,你往加点干什么干什么。Address点哦,那你说这个可以可以这么写,是这意思吗。能这样写吗?家辉,那代码能这样写吗?是啊,我说的不是它是引用,不是说它是引用,说你后边这个变量名是个引用。
15:04
Addr是一个引用啊,是一个变量,这个呃,Dress是一个类名。这个和这个有区别吗?没有区别对吗?为什么大家可以理解它,就不能理解它呢?这个就是按变量来理解,就只这就是个变量啊,这就是一个变量啊。变量名随意啊,这个变量名随意,你愿意写就写,写的不和他一样啊,和这个一样啊,我问大家润是不是一个类name是什么,是个变量名吧。
16:07
是不是用。嗯,这块呢,大家。我明白大家是哪不懂了。我明白大家是哪哪不懂了啊。有同学认为他是,就这不太理解这是什么东西是吧。不太理解这个东西。
17:04
呃,这么说吧,同学,我在这里写个闷方法啊,我在焖方法里边写上这个,这个和这个有什么区别?来所有同学回一下回一下,告诉我这个和这个有什么区别。如果你是出现在方法里面的话。这个叫啥?局部变量对吧。如果你出现在方法外边,是不是就变成实例变量了?这个代码和这个代码一模一样,没有区别,只不过换了一个位置,如果你在这里边定义,就叫局部变量,如果你定义到这,就叫实力变量。
18:08
那你这块是不是。就可以写。给这个ADR能不能在这儿赋值。这样是不是就相当于给这个ad负上值了?这不是个变量吗?变量后边等号后面六个对象附上去啊,你这两行代码现在你都合并起来写了,你怎么写的,你合并起来写是不是就直接是这个意思。这代码合并是不是就这意思啊?这个呢?这个将来是不是等于空,如果你调这个类的构造方法,它是不是空。
19:06
你需不需要通过,你需不需要给他赋值。你需不需要给它附上值,给这个属性赋值,你需不要通过等号的方式给这个属性赋值啊。需要吗?那你这块怎么做呀,是不是就相当于user user new user new出来new了user之后我们对象就有了,那我们这个是不是就是u.a点。你这是有点ID对吗?是不是付一个100,你给ID赋值是不是付个100。你现在给这个name赋值怎么赋,是不是优点name赋一个值叫啥?张三,那你现在这个有了,这个也有了,你现在这个是不是还是个空,你为了保证它不是空,你这个是u.ID你这个是U点内,那你这个是啥呀?不就是u.ad点吗?
20:16
这个能看懂吗?你ID你你现在你调构造方法,你创建的是U对象,它的ID是零,它的name是空,它也是个引用嘛,这也是个引用嘛,是不是这是个引用。引用默认赋值不就是吗?你调的是无参的构造方法,对不对呀?你无参数的构造方法,在这执行的时候,是不是这几个属性都没赋值,它是零,它是空,它是空,它附上值,你会赋负一个张三,上面ID你也会赋值,是个int类型,你付个100,那下面这个address address ad DR是个变量,你赋值你怎么负,你不得六个对象吗?
21:04
不,同学们,就是大家现在呀,还是不太理解,就是这个东西你不能看成是一样的吗。这不都一样吗?我只不过是基本数据类型,我这个是引用数据类型,我这个也是引用数据类型嘛。就听说过Java语言中有两种数据类型,听说过吗?Java中有两种数据类型,那如果要赋值的话,直接是优点ad点点还是在address后面括号里面赋值?如果要赋值的话,直接优点ADDRr.u.ad drr。你要点点它干啥呀。还是在address后面括号里。嗯,你优点ad drr你就推呗,你要是u.ADDR点的话,你u.ad drr不就是它吗。
22:03
对吧,你它的话,它就是它的这种类型address啊,你再往后点的话,就点点city呗,你要取城市啊。对吧,你要取街道啊,你要取它的什么呀,邮编呀。Address里面的。不都是没副职吗?你说这个是吧。对呀,没复制啊。没附上值啊。确实没赋值啊,这是空啊。下边那个也是空,这个也是空。我觉得咱们单独单独去去说一说这个东西啊,咱们先不在课堂上说这个东西了,因为我觉得这个东西没什么。没,没什么太复杂的地方,大家看u.a点是谁,不就是这个引用吗?
23:03
你怎么点ID啊,你点ID不就是这个吗?你点name不就是它吗?你点ID点不就是这个吗?那你你ID为什么是个100,为什么这不能就一个dress啊啊,因为类型不兼容,你后边是100,为什么后边有,因为你ID的类型是什么,类型是int吗。所以你优点ad点是什么类型啊,是address类型啊,你就得用一个address啊。那如果你想访问城市的话,你怎么访问,那你访问呗,对吧,怎么访问呀,就是优点呗,优点ID点,那你优点ID,你优点ID拿的是谁?各位你优点ID拿的是谁。不就100吗?那你U点什么呀?Ad drr,你这个ad点不就是上面这个ad点这个属性吗。那你这个属性。是一个address啊。
24:00
你address里边有C,你就可以再往后点C就行了,如果你要是接到的话,那就是u.ad点点什么呀,Street呀。你再往后点out,点打印输出u.ad点点什么呀,Zip code呀。那你这个值。现在是什么?是一个nu,这个值也是一个nu啊。对吧?你这个值也是个nu,为什么你这个值这个值和这个值都是nu啊,因为你u.ADR是new了一个address对象,你这个address在这里是不是调的无参数的构造方法,是不是它的属性是nu,它的nu它也是none,所以你这里采用u.ad点点 Cu.ad点点street.zip code难道都是none纸吗?
我来说两句