00:00
好,这个讲完以后,我们后边呢,还有这个关于一个叫设计模式的,在讲这个之前呢,再说一个小的内容。这个内容也可以呢,算成是一个小的新的知识点,什么呢?咱们在前边讲这个类和对象的时候提过一类对象呢,叫做匿名对象,对吧,那现在呢,我再讲一个东西叫做匿名类,说类还可以匿名。这个很神奇,那什么意思,这个咱们还在这个Java里边去写,那会儿呢,咱们写代码的时候呢,我是用了一个抽象的类,叫做person,咱们写到这里了,这个person类呢,是个抽象的,我这是一个默认权限的,咱们在同一个包下呢,我还可以用我这呢写一个。这个我就写成这个关于这个person它的一个测试了,我们通过这个代码呢,想给大家说一个事儿,就是关于抽象类的匿名子类的一个使用抽象类的匿名子类,这个呢,我们在开发中写代码的时候呢,常常也会这样去写,咱们前面讲叫匿名对象,匿名对象呢,这个大家都知道了,我们直接去这个,比如有一个方法,方法呢,比如public VO,这有个method,比如说啊,我这呢就声明是个person了,写个P这么着,嗯,先别是个P了,先写成一个stone吧。
01:30
这个S,然后呢,咱们在这调的时候,这个方法呢,咱们这个非静态的,我要想在静态里边调,是不是得去造对象啊,那这我就要么造个对象,或者呢,咱们讲了静态了,我是不是这加一个static,我就直接可以在这去调这个method了,也可以这时我就先这样来写了,那么这样写的时候呢,我们得需要给你去传一个student的一个对象了,咱们呢,当然说我直接这样用一个student,这样把这个呢,咱们称作叫做匿名对象。
02:03
保存这个student的话呢,你得看有没有这个空台构造器,这样你看我没有提供,那这块我提供一个。这个呢,我就干掉了,直接修破空了,相当于回过来这个位置呢,咱们相当于叫匿名对象。这个已经说过了,那么你造的是哪个类的对象,是不是很清楚的知道是student类啊,那就是我这个类其实还是有名的,只是这个对象没有名的,咱们当然也讲过,说你不一定非得要用匿名对象,你完全可以在上面给它显示,附给一个变量名,然后放在这去用,没问题,那是比较规范的一种写法,你要是说想省点事呢,就可以这样写,那么这个抽象类的匿名子类呢,也是一样,如果说你要不想用这个匿名的,你就显示的给他去,抽象类呢,提供一个子类显示去提供一个子类,比如说我们这时呢,我写个class叫worker工人吧,让这个工人呢,咱们去extend一下咱们的person,那提成以后,我这时候呢,我去实现这两个方法,具体都有方法体了,我这就不不主要去写这个方法体了,就先这样的先放着,但这也算是重写了,那写完以后呢,咱们现在假设有一个方法的位置。
03:22
哎,我也写成个了。我这写个叫METHOD1吧,这个方法这个位置呢,我们去声明一个person的行参,好里边呢,我们可以去调这个person的这个一的方法,然后调这个person点,采取这个work这个方法,这这里边,然后我们要是调这个METHOD1的时候,你需要传一个person的一个对象了,Person本身是抽象了,咱们只能说去new一个它的此类的对象,在这new了一个worker。把这呢,我们赋给一个具体的一个变量了,然后调这个METHOD1。
04:06
Worker放进来,这个时候呢,咱们首先这个这个这个new这个对象,这个对象呢,首先是有名的,其次的话呢,你这个对象它所属的类是不是就是worker这个类啊,这就相当于是一个有名的类,有名的对象能理解吧,就是把这个事我们这样我我写一下啊,这个叫非非匿名吧,非匿名的类非。匿名的对象。这就是咱们正常的一种写法,这个大家都应该很清楚了,那我要是这个METHOD1我这样写,我直接在这这扭了一个worker,这算叫什么呀。这叫非匿名的类,但是你这个对象是不是有个匿名的呀,稍微有点绕。能理解吧,这个事你看我们这个类是不是知道你用的这个worker的嘛,就是你这个对象呢,是个worker类型的,说你这个类呢,是不是匿名的了,但是这个对象的匿名了,因为没有赋给一个变量嘛,这呢都是咱们算是已经知道的这个情况了,那下边呢,咱们说一个叫什么呢?叫匿名类,这个类呢匿名了,又因为呢,咱们这是个抽象类了,呃,抽象类它的一个子类,所以我这就称作叫匿名子类了,那怎么写呢?我这样写,我person一个P,等于后边呢,我需要去拗一个此类对象了。
05:34
但是这时候这个子类不是像worker呀,或那会student一样,我们知道这个子类的类名叫什么,现在呢,不知道了。不知道的时候呢,我就这样写了,但是这样写显然不对吧,咱们说呢,你这个呃,相当于是用了一个person的一个对象了,Person本身是抽象类,不能够造对象,那我这里边呢,而且主要是因为你里边有串方法,然后我这时候呢,这样处理,在这个小括号跟这个分号之间,我这整个大括号,然后回车一下。
06:06
回车一下,嗯,正常来讲没见过这种写法啊,那我就这样写了,写完以后呢,这个还报错,就是把光标呢放在这儿,我点一下。给人感觉可能有点快,其实做什么事呢,就是把你里边这个抽象方法,比如说这两个需要重写的,我就放在这一对大括号里边。这个时候呢,就不报错了,那么这个时候呢,相当于是拗完了一个对象,但是这个对象呢,大家不要说我拗了一个person,拗了一个抽象类的对象。因为抽象类本身说不能造对象嘛,那你这时候应该怎么说呀,对,相当于我们创建了一个对象名,哎,或者这样创建了一个这样说吧,匿名类的,呃对象,这个对象呢是有名的,这个对象的名是叫P对吧。
07:00
这个类,这个匿名,准确说还是个匿名子类了。这个子类相当于咱们person来讲,这个子类没有名了,你像我这要写个worker,那你不就知道是个worker这个子类了吗?我没有名,没有名了,但是我们说你有对象的时候都得加个构造器,这时候你可以理解为就是我们拿这个person这个这个副类的这个名字来充当了一下。哎,充当了一下,你可以理解为呢,这个实际上是person的一个子类啊,你肯定不能说这是一个父类了,哎,是person类了,为啥呢?你像你要是一个person类的对象,你怎么可能这个类都已经造好了,你还能去重写这个方法呢,我们重写方法是不是只能是你这子类才能重写了,只不过这个子类呢,没有名啊,这里边大家不要去深纠结,说这个什么概念我得清楚,我逻辑怎么着,不用研究那么多,你就知道怎么写就可以了,就是还跟原来一样,你去扭一个对象,只不过这时候呢,人家是个抽样类,抽象类呢,那就把这个抽象方法你给它提供一下就完了,在这个这两个之间加个大括号,大括号呢,这块你一点。
08:06
把这两个方法就自动给你放这儿了,然后你需要做的事呢,就是把这两个方法呢,给它这个重写一下,比如这呢,我们就简单写个叫吃东西,这个呢就是呼吸。这个好好呼吸,这样这我就写完了,就是这呢,你理解为是我们person类的一个子类,这个子类呢没有名,但是人家方法呢,该重启都重启了,你都重启了,自然而然的我就可以造对象了,然后这个对象呢,我又使用了一种多态的方式付给了我们这个父类的引用了,那下边呢,我们去调一下,这个叫METHOD1,然后我把这个P呢扔进去。这样,然后上面呢,我这加一个换行。跟上边这没关系的啊,我们看下边这个,当我们去调这个P的时候呢,看能不能来调P,咱们P里边这不就调这俩方法了,那这两个方法这时候呢,是不是就应该是你这个真实的这个对象重写的那个方法是不是就这俩了。
09:10
OK,你看这不就是这两个,诶,嗯,PE这个it work啊,这掉的是work是吧。嗯,吃东西吃东西是他人走路啊,这个work是咱们调这个,因为没重写work嘛,Work是咱们person里边呢,是非抽象的一个方法了。是不是他掉这个了啊,这个咱们没掉塔,那你别别写work了,写个不呗,这样呗,哎,这不就有呼吸了。行,这就这个问题,就这为什么调这个呢?你看这不就多态的使用嘛,我这说明的是个负类的一个变量,我实际上是不是用的一个子类对象,然后呢,我们这时候编译的时候呢,是你调父类中的这两个方法,实际运行的时候不就是你子类对象的这两个方法法,所以自然的就是这两个方法,那这时候呢,这种格式我们就把它认为呢,咱们创建了一个叫匿名子类的对象,这个对象呢,是有个名的这样。
10:13
啊,意义,意义是什么?意义就是省事呗,就是你看我们上面说的就是非,就是匿名的事呢,都是为了省事,我就用一次嘛,你看你这个上面匿名对象你不就用一次嘛,只要涉及到匿名呢,都是就只用一次,咱们这个的意义呢,就是我就只用一次,我就省事,我就直接这样洗了,懒得像你这块啊,还吭哧吭哧的去造一个类了,你就造一个类,你就用一次,我这呢,连累都懒得去造了,就这个意思啊,其实还可以呢,再懒一点。还能怎么了,你这时候呢,你造的这个类是个匿名的,但是对象是不是有名啊,我干脆我造一个匿名之类的匿名对象,创建匿名之类的匿名对象。
11:01
那我就相当于直接调这个MASTER1了掉这里边呢,你是不是得需要传一个对象,就像没有名,我就直接在这里边new了,但new的话呢,我又不是new的一个person,也不是new的一个student火锅,我是一个person子类的,但是这个子类呢,叫什么名不知道,匿名的,所以形式上呢,我们还是写了一个person,这块呢,整一对大括号,需要在这个大括号里边把这两个方法呢得重写一下。CTRLC或者你直接光标放这,这样生成也可以啊,放到这。这个吃好吃的东西,好嗨的好吃的东西,然后好好呼吸新鲜空气,哎,你看这时候呢,我们再要去调的话呢,这时候它就会接着你这块掉俩方法,其实掉的就是这个结构了。这就这样,哎,这个呢,我们把这个结构你就相当于是相当于什么呢?我们呢,去提供了一个person,人家是抽象类了啊抽象类的匿名词类,这个对象呢,也没有名,还是个匿名对象。
12:06
啊,仅此而已,就是嗯,没啥特别说高大上的,就是呢,以后我们写代码的时候,有时候呢,就用一次就省事了,直接这样写了,大家呢,就是你能看得懂,你要想要求再高点呢,就是你自己也可以试着写一写,后边呢,有的时候我们会这样去写,或者呢,你看到别人这样写了,你能看得懂他在干什么就可以了,行,这就这个事儿。
我来说两句