00:00
大家好,我是海波老师,我们继续给大家讲解加入面向对象当中的语法,我们这里呢,来拷贝类啊,咱们拷贝,拷贝以后呢,我改成我们的24,然后呢,把这个我们去掉就可以了,好,我们点击OK,点击OK以后把这些东西我们全都给它去掉啊,咱们全都去掉,呃,去掉以后呢,我们这里给大家去稍微的说一下啊,Java中除了我们之前讲的类枚举还有接口以外,其实还有一种特殊的类,我们称之为叫匿名类。那么直观的理解啊,就是累,没有名字,诶,为什么没有名字呢?很简单,就是不需要或者不重要嘛,比如我现在写个程序,然后呢,我要对我碰见的人说,你好,Say hello啊,我就写个class,我就写个me,对吧?然后呢,我现在要碰见一个人,我也不管他是谁,所以呢,我这里写上一个class,我叫做person好了,写完以后呢,我24啊,放过来,放过来以后我就想碰见一个人呢,我就说say hello,诶,所以在这种情况下呢,大家可以看到我就写上一个public,然后呢,我们写上word,然后叫say hello。好了,写完了以后呢,大家可以看到,那现在我觉得碰见个人呢,那么好,这时候把那个PRO24呀,我放过来,放过来以后我们的PRO24,诶放到这边就可以了,但是有问题啊,我碰见个人我得知道他叫什么,我才能c hello吧,那所以呢,他就得有一个我们的方法了,这个方法我们就是获取名称用的,但是每个人的名称它又不一样,那所以呢,我们这不能固定写时了,所以呢,我们给他个抽象的,然后呢,给他一个string,我们叫做name,对吧,我们这么写。
01:28
你这么写了以后,咱们前面讲过了,当我们的一个方法为抽象方法的时候,这个类要生命中抽象的对吧?那所以呢,我们这里呢,拷贝一下就是我们有一个抽象类对吧,就是这样的,那你有一个抽象类以后,我们现在只需要获取这个人的名称,我就可以say hello了呀,所以我就写上它,我们叫c hello,诶放过来,放过来以后叫hello,加个空格,再写上叫person r4点我们的name,哎,你这么写就可以了。写完了以后,现在呢,我就把它构建出来,那比方说我现在啊,给它写上一个叫做me啊,然后呢,等于new,咱们的me写完了以后,那我C还吧,那所以我写上他,我们点点了以后我say hello,那么这个时候大家记住了,你如果碰见一个抽象的一个人来说hello,这是没有道理的,我们得碰见一个具体的人是吧,张三李四王五的,所以呢,我这里呢,还需要创建相应的子类,所以呢,我这里写上一个张三,然后呢,我们写上叫继承,咱们叫PR14就可以,好给他一个划括号,那么这个时候呢,要把这个方法给它重写了啊,来重写,重写以后把这个抽象去掉,因为我要补充完整了嘛,对吧,好,把这个放过来,放过来以后我就直接return啊,我们就写成他,咱们就叫张三就可以了,好,那你这么写完以后,我只需要把张三我们拿过来就行了,你碰见的这个人呢,就是个张三呢,所以来我们张三放过来行了,这么写代码不就写完了吗?写完了以后我运行一下,同学们看一下。
02:53
这时候你会发现我们当前的这个hello,就是说hello,张三没有任何的问题,哎,老师,万一我碰见的不是张三,是碰见了李四呢,如果你碰见了李四的话,来我class,我们叫做李四,然后呢,我也得继承啊,咱们叫person r14对不对?好,写完它写完以后你的名称啊,我们就需要拷贝了,拷贝以后拿过来改成李四就可以了,诶,那我这里就别碰见我们的张三了,把这个住掉,住掉以后我这边写上一个我们的李四不就行了吗?对不对,行,那我写完以后,我运行一下,你会发现我当前就是c hello,李四,诶你看没有任何的问题,那老师,那如果我再碰见王五呢。
03:32
要照你这个说法呀,我张三李四玩,我们赵六田七,我挨个碰呗,对不对,可是你要挨个碰的话,那么我是不是要写很多的类呀,我每个类是不是都要继承我的坡24呀,对不对,为什么呢?因为每个人的名字它不一样嘛。啊,这就显得有点麻烦了,同学们,为什么?因为对于我们来讲,我更关心的是你叫什么名字,你其实什么类啊,对我不关心,为什么?因为只要你是个人就行,你的名字我得到了,我别的不关心,所以在某些情况下,类的名字没有那么重要,所以咱们说一下,在某些场合下,我们类的名字它不重要,对吧,我们。
04:09
只想使用类中的方法。或功能。那么此时我们啊可以采用特殊的语法,我们叫匿名类。所谓的匿名类就是没有名称的类,所以我们这里补充一下,所谓的匿名类,它就是没有名字的类。那好,怎么用呢?非常简单,大家看到你这个李氏不就是个名字吗?哎,你的李是继承了我们的坡神二四呀,但是我根本就不在乎你到底这个类的名字叫什么,我关心你的这个人的名字叫什么,对不对?那所以呢,我这个地方就不要去写具体的某个类了,我直接把这个抽象类中的PERSON24拿过来,我就是碰见了一个人。那你碰见了个人,他叫啥名字呀?诶,我就更关心他的名字是什么,所以我写个大括号,大括号以后你把他的名字给我写进来就完事了,所以拷贝,拷贝以后你把它给它补全了,同学们你这么写其实就可以了,这么写完了以后,我就直接写了,叫return,写上我们叫王五,哎,同学们有没有发现你这么写了以后,根本就不需要再额外添加王五的类了吧,你直接运行就可以了。
05:24
运行以后看结果你会发现没有任何问题,同样道理,那你可以再来一个呀,再拷贝,拷贝以后我又碰见了个人,诶,我看到他的员工卡片了,诶他叫做什么呢?我们叫做照六对吧?诶,我不用创建专门的类啊,同学们,我只需要用一个我们的名称代替它就行了,诶运行运行以后看结果你会发现没有任何的问题,王五赵六不就出来了吗?赵六田七你就随便写吧,反正这种方式呢,就可以减少我们类的声明,但是呢,我的功能还可以使用,这不挺好吗?对不对?所以啊,我们这里直接谬了一个类的对象,那这个类的名称并没有,而是通过这种声明方式将我的对象创建出来,这个我们就称之为叫匿名类。
06:07
其实啊,不光是我们抽象类存在这种情况,我们的那个接口也可以使用这种方式,我们之前不讲过吗?咱们的接口呢,可以通过类来实现它,对不对?你毕竟是一种规范呢,那我符合这个规范就行了呗,同样道理,我只要符合这个规范,你就不要管我是什么了,对吧?不就这个道理嘛啊所以我们这里来演示一下,比方说我们现在有一个非的这么一个规范,我们写上叫interface,对吧,我们叫做FLY,好了,然后呢,我在里面定义一个规则,咱们加上public,咱们写成word,咱们就叫FLY就可以了。好,你这么写完以后,这个方法是一个抽象方法,为什么?因为接口中定义的方法它都是抽象的,而我们接口中定义的属性都是常量不能更改的,我们讲过对不对,但是你要记住,我们的接口是不能创建对象的,我就想创建对象开始飞呀。这个时候呢,我们可以去用一个类来实现这个规范,比方说我写个class,我们叫做board,诶写上一个implement,然后呢,给它一个FLY,然后呢,我们放过来,你这样的话,这就意味着鸟是可以飞的,那它怎么飞呀,它用翅膀飞呀,诶所以我们放过来它就可以了,所以我们这里写上啊来。
07:17
使用翅膀啊飞翔,诶好了,因为啊,咱们这个bird呢,之前已经声明过了,所以我这里写上一个我们当前的一个R14吧,好,写个R14就可以了,好了,写完以后大家会发现我当前呢,我们就来了,我们在这里呢,就直接构建鸟的对象,咱们叫bird,然后呢,直接点咱们叫FLY就可以了,好了,我现在运行一下,看结果,运行以后你会发现没有任何的问题,对不对,使用翅膀飞翔,咱们的bird呀,就使用翅膀了,对不对,哎,就是这样,那我们人呢,诶可以使用一些我们的工具来飞翔,对不对,这个就不重要了,重要的是我们能飞翔,你怎么飞,叫什么名字不重要,比方说你是鸟飞啊,还是人飞呀,这个咱不说了,对吧,但是我现在呢,就关心我怎么飞的,你是什么动物还是什么生物,我不管,那怎么办,跟我们前面一样的,我们不用给它名称,我们只关心它是怎么飞的,所以啊,我们这里写上它,我们叫做new,然后把这个FLY呢,我们拿过来,拿过来以后,然后呢,我们写上点叫做FLY,这么写就行了,但你。
08:18
这么写完了以后有问题啊,同学们,为什么当前这种方式,它怎么飞不知道啊,所以我加上一个我们的花括号,然后在这里我们重写它的方法,咱们叫FLY方法,所以拷贝,拷贝以后放过来,然后写上一个划括号就行了,你这么写完以后就等同于去飞了,只不过我不关心你是什么类吗?我只关心你是怎么飞的,所以我这里打印,打印以后我写上它,我们叫做使用飞行器飞行。你看这就可以啊,所以呢,我们现在运行一下,你会发现我们人啊就可以使用我们的飞行器了,到底是我们的飞机啊,还是我们什么什么东西啊,咱就不管了,它是可以飞翔的,你看这不就可以了吗?所以啊,咱们这里就等同于构建了一个没有名称的类的对象,我们就把它称之为叫匿名类啊。好了,这个咱们就先说到这。
我来说两句