00:00
来继续,抽象类属于什么数据类型,注意啊,抽象类也属于什么呀。引用数据类型。啊,不是基本数据类型,各位啊,什么in了,跟这个没关系啊,这是基本数据类型。抽象类,也属于引用数据类型。注意啊。那么抽象类怎么定义呢?语法是什么?这个语法是修饰符列表。然后呢,Class后面加类名,Class前面加一个abstract。这就是抽象类。这里是类体。啊,这个语法就是这样的一个语法,各位我先说一下啊,就是我这里啊,只给只负责给大家讲语法,明白了吗。
01:09
有同学就问老师,那我什么时候定一类?定义为抽象类啊,就大家可能现在最主要的一个一个疑惑,就是说老师,我我什么时候这个类,我我我我应该加一个这个abstract,我说应该不加,应该加什么时候加,什么时候不加,这个只能咱们到后边再说。现在只能去学习一下抽象类的基础语法。啊。这个我就不写了,各位啊,知道这个事儿就行啊,我不知道大家有没有都在听课啊,因为有些同学他确实现在已经已经分神了。对吧,已经分神了,然后那个没准这会想着中午吃啥呢,有可能啊,是吃这个烤鸭还是烤鹅还是烤鸡,是不是啊在在这想这个事儿呢啊嗯,你可能回头会问我说老师我没有听明白啊。为啥没听明白呀,老师,我这个抽象类这个东西什么时候定义抽象类我不知道啊。
02:06
对吧,我我什么时候把这个类定义成抽象类呢?这个我并没有讲各位啊,我在这里强调一下,只是为了跟大家说一下这个抽象类的基础语法。啊,然后呢,至于说以后我们这个类前面加abstract还是不加abstract这个呢,可能我们现在还讲不了啊,因为没有合适的案例啊,没有合适的案例。来,我们把能把基础语法学会就行啊,能把基础语法学会就行。能把基础语法先学会啊就行了啊好了,那么接下来咱们接着往下看啊,比如说我们尝试着在这里定义一个类啊,这个比如说叫做银行账户类。那么我们叫class什么呀,Account?是不是,然后呢,加一个abstract啊是不是,哎,这就是一个抽象类。抽样类啊,这样定义就行了,Abstract abstract抽样类。
03:03
那么这个抽象类能拗对象吗?我们扭一下试试。抽象类能够创建对象吗?直接在前面呢,加一个什么呀,拗我们拗一下。CMD走Java c编译谁呢?我们叫做abstract走。Account是抽象的,无法实例化。看见了吧?这个测试足以说明account是抽象的,无法实例化,没有办法创建对象。创建不了啊,你写全吧,Account。无法实例化啊,来再编译下下。是吧,不行吧,哎,不行啊,这行代码是不行的,来注释掉。那你说抽象类,实际上它没有办法抽象对象是不是抽象类天生就是用来继承的,对吧。
04:05
我这句话有毛病吗,各位?啊。你思考一下。嗯。抽象类啊,抽象类是无法实例化的。无法创建对象的。所以,抽象类。啊。是。用来背什么继承的?啊,用来背词类继承的啊。没毛病啊,抽象类是用来被子类继承的,各位。因为你拗不了对象啊,你存在有啥意义啊,对吧,哎。所以这块我们呢,可以给一个子类。去继承他。啊。子类继承抽象类,子类可以实例化。
05:05
对象对吧,Class,比如说就叫。Credit account信用卡去继承谁啊,Account啊是不是?哎,子类继承抽象类,子类可以实例化对象有同学就说老师我呀,我觉得这个信用卡它也挺抽象,我想在前面加一个abstract行不行?没问题。没问题,我说了,你抽象了类之后,抽象类和抽象类之间还可以再抽象,抽象外还可以再抽象,世界万物都可以抽象。对吧,哎,你抽象类的子类可以是一个抽象类。没问题啊,没问题。但也可以是非抽象的,那么就回到根上了吗?就是到底什么时候加abstract,到底什么时候不加这个abstract。可能现在还。还不知道对吧,哎,还不知道,还搞不明白啊,搞不明白。
06:04
嗯。子类继承这个抽象类啊,子类可以实例化。对象我这里说了,抽象类是无法实例化的,无法抽对象的,所以抽象类是用来被来继承的。那么现在大家思考一个问题,Abstract可以和final联合使用吗?这个类能不能是这个abstract能不能是final。我们把下面那本注释掉啊。Final刚刚讲过,Final修饰的类是不是无法被继承,而你抽象类存在的目的就是为了让继承,对吧?你反过来abstract前面加个final来,我们编译一下啊,看这个行不行,就是说你既是抽象的又是final的行不行。来,走。非法的修饰符组合,咔一下子告诉你,Abstract final2个关键字是敌人,这两个关键字不能同时出现。
07:07
这俩是敌人啊,就是有我没你,有你没我,就这意思,咱俩不能同时出现,咱俩同时出现就属于非法的修饰符组合。看见了吧,所以呢,这块呢,还有一个比较有意思的东西,就是final和abstract不能。Final。是对立的啊,不能同时出现。明白吧,哎,不能同时出现。那么如果你这样写就废了,你看。对吧,哎,把这个拿过来。啊,然后粘贴到这儿。大家看着啊,就是这个来这个代码不行啊,不能这样写,来继续写我们的程序,把这个拿过来。
08:00
刚才说到哪呢?说到我们抽象类这块啊,无法被实例化,刚才拗了一个对象,大家也看见了,其实不行,不能抽现对象对吧,然后OB前面不能加final啊,加了final就废了,这俩关键词不能同时出现啊呃,然后呢,这个子类呢,去继承抽象类。对吧,哎,没问题,你看。可以吧,那。如果是一个储蓄账户或者这样啊。抽象类的子类可以是抽象类吗?抽象类的子类可以是。抽象类吗?答案是可以啊,也就说你这个上面是抽象类,我此类去继承负类之后,我现在还是加一个abstract行不行,那没问题,同意啊,就是抽象类类可以是抽象类啊。
09:00
抽象类的子类。可以是抽象类没毛病啊,所以你看这个东西啊,怎么说呢,我呢在这讲这个基础语法,你下一周呢,只能去根据我这个基础语法干啥去测试。你明白吗?去测试一下,测试一下各位啊。这个东西你要是这么多,你去记忆,我觉得死记硬背也不太现实,你等你自自己亲身测试过之后,你就发现哦,理解了。理解了啊,理解的基础上再记的话,我觉得会好一点。来这个注释掉,我再把上面那个放开啊,哎,这是子类是不是,哎子类啊。好了,那么抽象类虽然无法被创建对象,但是抽象类里边有没有构造方法?各位。又来一个啊,抽象类无法虽然啊,虽然无法实例化。但抽象类里边有没有构造方法呢?
10:01
就这里边有没有构造方法,各位。有还是没有给个回应来,各位。有是吧,为什么?为什么抽象类里面有构造方法?不要有疤啊,来,各位,我问大家一个问题,是否曾经还记得我讲过这样一个东西?嗯。构造方法不能继承。构造方法不能继承啊。你还记得之前我讲过什么吗?子类的对象在创建的时候,它通常会先去调用父类的构造方法。对供子类创建对象用的。注意啊,就是说抽象类虽然无法实例化,但但是啊,但是抽象类有什么有构造方法,这个构造方法是供子类使用的。
11:04
抽象类虽然无法实例化,但是抽象类有构造方法,各位啊,抽象类有构造方法啊,这个构造方法是供子类使用的,什么意思?比如说吧,在这块呢,我给一个构造方法,各位啊,大家看好了。给一个什么呢?有参数的构造方法,然后呢,接下来我这个程序能不能编译通过告诉我。这个程序能编译通过吗?别忘了,这个类里边如果没有定义构造方法的话,这个类当中有一个什么无参构造,无参构造第一行有一个什么代码。无参构造的第一行有什么代码?无参构造的第一行是不是有一个super括号?这个super括号调的是负类的无参构造,对吗?
12:02
那现在account这个类作为负类,里边如果有一个有参数的构造方法。是不是就意味着大括号里边是不是就没有那个无参构造?逻辑推理啊,侦探嘛,是不是。你这个类里边是不是没有构造方法,没有提供构造方法,是不是有个无参构造,你无参构造第一行什么也没写,是不是有个super括号,Super括号是不是掉的负类的构造方法。而且调到负类的无参构造,你负类里边写了一个有参数的构造方法,你无参构造是不是就没了,所以这个程序是不是愿意报错。好,我们来看。对吧,第17行有问题。这有问题,47这个类有问题,因为你这里有一个无参的构造方法。你无参构造第一行有个super括号,这个super括号其实掉的是你这里的无参数构造方法,明白吗?
13:09
由于你把无三构造写上了,那行没问题。如果你要是把无参构造给它注释掉,对不起,由于你已经有了一个有参数的构造方法,所以无参构造。你要不写就没了,你要不写出来这就没了,那这个时候就会导致导致我这里的构造方法去调你的时候,这个构造方法不存在,去56行调super括号的时候会调这个。它不存在,不存在那就出问题了,你看不行。对吧,所以大家要注意这个问题啊,注意这个问题你看。是不是这56行有问题啊,56行在这儿,你看这个不行,这不行,嗯,这个。你把它放开就行了。对吧,哎,放开就行了,或者还有一个办法,你把这两个都注释掉行不行。
14:02
万变不离其宗,全部注释掉是不是代表这个类没有构造方法,没有构造方法系统会提供一个默认的无参构造方法,对吧?那么这个调的是不是就是无参构造方法呀?所以这样是不是也能通过?没问题啊,所以说当子类new对象的时候,Super括号如果找不到负类的无参构造就会报错,对,当然是啦。当然是啊,你之前做那个题的时候,你就有好多同学都问我这个问题吗?现在就可以解释了呀,可以解释呀,之前我就解释过了,已经。啊,这样是可以的啊,这里最主要是想跟大家说抽象类啊,它无法实例化。但是抽象类有构造方法,这个构造方法是给子类用的。是供子类使用的,各位你看我刚才是不是在这测了半天了,各位啊,你需要把我刚才测的过程记住吗?
15:00
你需要上课的时候把我测试的过程记下来吗?没斌说的道理,不需要啊,不需要记我怎么测的,你只要记住有这么一句话,接下来你自己自己根据这个结论,你自己测,自己折腾自己玩,明白吗?这个才叫会听课,如果说通常有一些同学啊,他有一个现象就是分神,你懂吗,分神。这个分神是怎么回事?是因为他听着歌听课,听课听的时间长了。这个听个听的时间长了之后呢,要是我的话,我这个大脑啊。怎么着呢?也会走神,也会分神。所以说你不要钻到我这个测试里边,反正我这个测试是围绕着什么,是围绕着这个结论来的,所以你将来围绕这个结论进行测试就行了。啊,测试就行了啊,你看这好多结论是不是什么是抽象类啊,是类的再次抽象。
16:05
抽象类属于什么类型啊?引用数据类型,抽象类怎么定义呀?这样定义abstract是不是?哎,没有办法实例化抽象对象final和abstract不能连用,抽象类的子类可以是抽象类,抽象类虽然无法实例化,但还有构造方法,有构造方法是给子类用的是不是?那是不是可以去掉abstract没有影响,没有影响啊。没有影响啊,现在不说了吗?同学们现在应该有一个疑问,就是老师我听能听明白,就是这个东西呢,以后我不知道这个类前面加不加abstract,到底生命成抽象类还是说生生明成类呢?对吧,这个我说了,后期我们只能在项目当中再去谈论这个事情啊,现在只能学一些基础语法。
我来说两句