温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:00
接下来我们再介绍另外一个比较特殊的概念,就是匿名子类,那这个概念其实Java里边也有,大家应该不陌生,所谓的匿名子类呢,指的就是说你像我们现在这一个抽象类,它如果要用的话,必须有一个具体的实现,那有时候大家可能就会想到,我当前在使用的时候,可能它的具体实现我并不关心应该叫什么名儿,我并不需要单独在外边把它声明出来,我只想在代码里边用到的时候,直接给他创建一个具体的子类,然后把对应的那些抽象的属性和方法实现出来就完事了。嗯,能不能直接这么用呢?其实也是可以的,这样的话就相当于我们这个类,它的这个子类啊,实现的子类是匿名的,没有名字的。啊,接下来我们在代码里边给大家做一个简单的测试。你有一个的object,现在是TEST10。然后我们把这个叫做匿名子类啊,呃,Nomo us may,然后接下来我们同样还是先去定义一个抽象类名词类的这种写法啊,在Java当中大家也知道啊,一般都是针对抽象类或者接口来用的,那么在skyla里边呢,也不例外,也是这样,所以abstract plus我们可以直接定一个person值,然后里边我们可以随便去定义啊,比方说给一个name string,这是一个抽象的属性,然后另外我们定义一个it方法,是一个抽象的方法,哎,那接下来如果我直接就想用这个person,一个抽抽象类创建一个具体的对象,那应该怎么用呢?我可以不不定义具体的这个它的子类啊,实现它。
01:57
我可以直接在代码里面做这件事儿,那就是这边我直接定一个person。
02:02
那类型这就不用说了,肯定就是PERSON10了,那在定义的时候怎么办呢?直接去new new一个PERSON10,那之前我们说了,本身这是抽象类,你没有办法直接创建它的具体的对象实例,那怎么办呢?呃,我们自动补全的时候你会看到。艾idea尔直接就帮我们把对应你要做的事情都列出来了,对应要做的事儿就是必须要把它的抽象属性和方法实现出来,这样的话我们就相当于创建了一个它的匿名子类啊,那所以这里边当然就是当前name,可以直接给一个,比方说当前的person叫Alice,然后下边的方法,那我可以直接去给一个。前这个person it都是可以做到的,对吧?啊,当然这里面我们应该是要print做一个打印,这样的话定义完了之后我们就可以直接。
03:00
呃,可以去打印当前person的,也可以直接调用person的方法,所以这里边就相当于我们这个person得到的是一个具体的实例对象了,就不再是一个抽象的东西了,我们可以运行一下看看。大家看到这跟我们实现了它的一个具体的子类,然后再去创建对应的实例,调用这个方法得到的结果是一模一样,这就是匿名子类的用法。
我来说两句