00:01
嗯,好了,同学们,那咱们就。呃,接下来咱们就开始上课啊,开始上课我们还是先简单的这个回顾一下啊,我们今天上午的一个内容。啊,今天上午的这个笔记呢,我们先给他打开啊。来把这个打开。把这个打开啊。那么我们今天上午啊,其实到现在为止吧,啊,就相当于是讲了算是两个点啊,两个点还没讲完,那么第一个点是什么呢?第一个点呀,是咱们的这个final关键字,那么整个这块呢,其实写了很多,呃,但是呢,大家注意啊,大家注意呃,其实一句话就可以搞定了,Final表示什么呀?最终的不可变的啊,Final表示最终的不可变的啊呃,这个呢。嗯,这样去记就可以了,它修饰的类不能继承,修饰的方法不能覆盖修饰的变量,只能赋一次值。
01:02
啊,修饰的引用指向对象之后啊,它就不能再去指向别的对象了。但是指向的对象的内部数据是可以改的。Final修饰的实例变量要求必须手动初始化,不能采用系统默认值。Final修饰的实例变量一般和study一个连用,这样的话就是一个常量了啊,今天上午其实讲了一个常量啊,这个常量呢是sta一个final啊,Study个final,那么这个是就是我们的final关键字啊,那么今天上午在我们最后的一节课呀,我们给大家讲了讲抽象类。那么抽象类呢,这块呢。呃,讲了哪些内容呢?我们打开我们的代码再来看一下,好吧,哎,这是我们的代码。那么这块呢,其实东西啊比较琐碎,但是呢,我想说的是你呀,要注意啊,课下你在练习,你在这个你在写代码的时候,你呢,不要干什么呀。哎,不要这个,你想着上课的时候我是怎么测的,我曾经怎么跟大家说的,哎,你你看我一会把这个代码注释掉,我一会儿就把这个代码打打开,对吧,一会儿把这个代代码注释掉,一会儿又打开,你可能都不知道我是怎么测了,如果你记这个,那你就学错了啊,还是那句话,你呢,哎,看着上面的结论,一个一个呀,干什么呀,去验证那一个一个去验证,去推翻它啊,使劲推翻推翻不了,哎,那你就掌握就行了,对不对,在你这个。
02:29
敲代码的基础之上,你去记啊,这样可能会好一些啊,会好一些。好了,那么行了,那么接下来咱们就把这个抽象类这再回顾一下,抽象类这块呢,我好像给大家画了一个图啊,我不知道大家有没有去理解这个图。这个图我放哪了呢,在这。我再重新打开啊。在这个位置有一个图啊,这个抽象类呢,其实是什么呢?首先第一个你要知道对象是实际存在的个体。那观察对象和对象之间呀,具有什么共同的特征,所以进行抽象呢,就形成了类。
03:07
是不是那么有信用卡类和储蓄卡类,那信用卡和储蓄卡呢,它可以再进行抽象。对吧,形成的这个类我们叫抽象类,我们可以暂时这样去理解,抽象类,抽象类能不能再抽象一个抽象类出来,可以,抽象类无法实例化,这个事儿要知道。啊,无法实例化啊,不能创建对象,这个类型没有办法创建出来对象拗不了。但是它有构造方法,它的构造方法是给子类使用的。一般情况下,我们在程序当中编写的抽象类都是让我们此类啊去继承的。所以抽象类这块呢,它不能用final修饰。如果你既是抽象类又用final修饰的话,我们Java中不允许这种语法的出现。因为他两个是敌人相对的。啊,这些知识点呢,我们在这个文档当中啊,大家都可以看到。
04:00
哪啊,来,我们一个一个过啊,什么是抽象类呢?类和类之间具有共同特征,将这些共同特征提取出来,形成就是抽象类。类本身不存在,所以抽象类无法创建对象,无法实例化。那么抽象类属于什么类型?属于引用数据类型?各位记住啊,就算你这个类是抽象的,你编译之后它还是个class文件。啊,我不知道大家有没有理解这个啊,就是我们class前面有一个abstract抽象类,我们编译之后啊,它这个同样也是会生成自解码文件,点class文件的,叫account.class。account.class属于属于什么类型?引用数据类型,我说过Java源当中数据类型就包括两种啊,一种叫引用数据类型,一种叫做什么呀,基本数据类型啊,基本数据类型。好,呃,那么接下来再往下呢,抽象类怎么定义呢?我们在修饰符列表,诶这块呢,其实加一个界,什么叫abstract abstract这个单词啊,其实就是抽象的意思啊,叫ABS tr act啊。
05:02
这个单词呢,叫abstract abstract抽象的啊,抽象抽象类无法实例化,无法创建对象。啊,所以抽象类是用来被此类继承的。Final呢和abstract不能联合使用,这两个关键词是对立的。另外,抽象类的子类可以是抽象类。啊。抽象类的子类可以是抽象类,也可以是非抽象类啊都行。也可以是非抽象类啊,抽象类虽然无法实例化,但它有构造方法,你比如说我们这个抽象类,它就有构造方法,为什么呀,因为虽然你没有办法创建对象,将来我有一个子类呢,可能会去继承你。明白吧,哎,那我继承你的话。哎,那么这块的构造方法我就用上了,因为在此类当中的构造方法里面,Super括号S括号呢,是要调用负类构造方法的,就是这样。好,这是这个。
06:01
啊不不,这是哪哪个,这是这个啊,抽象类虽然无法实例化,但抽象类有构造方法,这个构造方法是供子类使用的。抽象类关联到一个概念,什么概念呢?在这里说了一下,抽象类当中啊有抽象方法,那什么是抽象方法呢?抽象方法就是public abstract void像呃,不一定是void啊,然后方法名对吧,形式参数列表这个地方不。不允许有大括号,是一个分号结尾的。啊,这个抽象方法呢,其实就是没有实现的方法。抽象方法其实就是没有实现的方法,一般情况下我们在这块呢,加一个大括号,大括号里边写着代码,就相当于是一种什么呀方法或者是行为的一种具体实现。那么方法大家呢?其实一定要这个联想之前我们讲过什么方法,什么是方法呀,方法其实模拟的就是我们现实生活当中的行为或是动作,对不对?
07:00
那如果你是抽象方法的话,就相当于只是一个什么呀。只是一个抽象的一个行为。对不对,这个行为没有具体的去去实现。没有具体的去实现,就这个意思,只是定义,只是有一个定义罢了。他没有去具体的把这个方法,把这个行为,把这个动作给他实施了,对吧?啊。好比说我们在现实世界当中有一个什么合同,对吧?哎,在合同上规定是怎么规定的。如果只有一个合同我们不去做,那就相当于只有一个合同,对吧,如果有一个合同,有一个协议,然后我们呢,去把这个协议给它实现了。对不对,哎,你比如说来到咱们动力节点呢,你需要签一个培训协议。那么这个培训协议啊,哎,签完之后呢,这个协议就相当于是一种抽象的东西,那么你在动力机点学习的过程当中,哎,老师教你去学,我们去履行这个过程,而我们可以把这个过程就看成是一种协议的一种具体实现。对吧,哎,那么这个抽象。
08:01
和实现这俩词呢,我觉得大家要敏感一些,抽象呢啊就只是可能是一个概念,实现呢,其实就是,哎,我们把这个东西啊,给他实施了,给它实现了,那现在的这个抽象方法,它是没有实现的。对吧,表示没有实现的方法,没有方法体的方法啊,这就是抽象方法。那么抽象类中不一定有抽象方法,我刚才在,呃,不是刚才上午在最后的时候,我说抽象类大家看。我是不是可以把这两个都删了呀。抽象类里边我没有抽象方法,你看不写抽象方法,你编一下Java c叫abstract t01.java看可以通过吗?是不是?所以抽象类当中不一定有抽象方法。哎,那我们有非抽象方法,也有抽象方法,我们都写出来看行不行,你看也行。是不是,但如果你这个类大括号开始大括号就里边有抽象方法的话,那我这个类如果不是抽象的行不行,诶这就完了,这就不行了。
09:09
所以我们在这里呢,写了这样一个结论,什么结论呢?就是说你自己测啊,抽象内容不一定抽象方法,但抽象方法必须出现在抽象类里边,就是如果说你这个里边有抽象方法的话,你这个类必须得是抽象类。明白吗?哎,如果你这个里边有抽象方法,你这里必须是抽象类。如果。如果你不是抽象类。那我这里边就不能有抽象方法。我说慢点啊,就是你如果一个类当中有抽象方法的话,你这个类必须得是抽象的。必须得是抽象的啊,你看。如果你不是抽象的不行。但如果你是抽象类的话,我说一下啊。不一定有抽象方法,你这样写是没问题的啊,是没问题的,下去之后呢,你可以把这个东西给他测试一下。
10:02
测试一下啊行,那么这个呢,其实就是我们啊。上午我们讲解的东西对吧,哎,我们讲解的东西啊。
我来说两句