00:00
行了,那咱们就接着往下看吧,我把这个关掉了,这个呢我先清一下,然后接下来呢,我把这个呢,我也关了它了啊关了它了,来,那我们接下来继续往下看吧,各位啊,还是这个目录来点右键,我们新建一个什么呢?我们叫super。TEST03。那么这个例子我们来看一下什么呢?看一下就是说这个什么时候使用这个super,就是在恰当的时间使用super括号啊,来在恰当的。时间啊,使用什么呀。啊,这个地方叫实际参数列表。我给大家举个例子啊,举个例子,举个例子,在恰当的时间使用这个super括号啊,在哪用呢?我们来看一下各位啊,来看一下比如说吧。
01:00
我们之前有一个例子,是那个银行账户的例子,账户还有一个例子叫什么叫信用账户,对吧,信用账户大家还记不记得这个负类啊,这个是此类,然后在这儿我们还有个测试程序,应该还记得吧,Public class super03来public static voidman。然后这块呢,我觉得我有必要把之前代码我复制过来啊,大家还记不记得这个代码是在哪天讲这个账户和这个信用账户在哪讲的。应该是在继承吧。如果印象。大家还记得吗?继承是在哪个章节讲的继承?在12章是不是第12章里边哈,好,那么继承是是一里边的吗?哎,不是一是二二里边应该写过银行账户。我们把这个账户拿过来,你看封装了是不是属性私有化,对外提供公开链资源加的方法,我们把这个复制一下啊,这是一个什么普通账户是不是,哎,账户拿过来不写了啊,太累了,手疼,来我们再往下呢,有一个什么叫做信用账户。
02:11
这是一个子类,我们拿过来,然后呢,我们放到这里。啊放到这里,然后接下来呢,我们在这块呢,Do some就删了吧,跟这个没关系啊,然后呢,这个此类啊,这几个字我也删掉它上面这个呢,是一个负类是吧,我也删了它,大家都知道了,所以我就不用在这里说了啊来我们再回来啊,回来这个第14章这块行,那咱们继续再往下啊,刚才我很快速的呢,把我们之前的代码拿过来了,这是一个负类,各位叫银行账户有两个属性,一个是叫做账号,一个叫做余额。然后呢,有一个无参数的构造方法,有一个什么呀,有参数的构造方法,大家看见没有啊,这是无参的,这是有参的,有两个参数,一个string,一个double,然后再往下呢,是两个属性,提供四个方法,一个set,一个get,一个set,一个get,非常完美。这是我们封装之后的一个非常普通的Java类,接下来在子类credit account继承account之后,大家看这里有一个属性叫呃,叫做呃信誉度。
03:16
是吧,这个属性是不是叫叫做信誉度啊啊啊,你的诚信呗,诚信值其实就是诚信值啊,诚信值。那么这个诚信值呢,是个类型,这个呢,是说白了,这是一个子类特有的什么子类特有的一个属性啊。就是子类特有的一个特征啊,父类没有,然后接下来我在这里呢,有一个无参数的构造方法,然后呢,有一个set方法,是对于我们这个credit啊,这个属性提供了set,那么大家是否还记得我们当时在写这个类的时候,我在这里只提供了无参数构造方法,并没有提供这个有参数的构造方法,对吧?那现在我在这提供一下有参数的构方法来试试,大家看会出出问题啊,来提供有参数的构造方法,因为你这个类呢,提供了无参构造,可能用起来不是很方便呀,我现在想提供一个有参数构造方法,我以后可能会叫有参构造方法呀,是不是?所以我就开始写了,我把这credit account拿过来放到这之后啊,那因为呢,我们这个账户啊,它继承了这个account之后啊,它的属性加上这个两个,再加上这个是三个,所以这个时候呢,我们这里呢,应该有三个局部变量,一个是一个是什么呀,再往下就是这个double balance,那么这个时。
04:35
Double,然后再往下呢,还有一个double credit好了,那么接下来我这个代码这样写,怎么写啊,this.act等于act this balance等于balance。然后呢,This点叫credit等于credit啊好了,大家分析一下这个程序编译能不能通过呀,以下代码有没有问题呀,分析以下程序是否存在编译错误。
05:08
好,给大家点时间,大家看看这个能不能编译通过呀。你子类不是继承父类吗?对吧,你创建一个信用账户的话,有三个参数呗,对不对?哎,你给他附上值呗,对不对?Account number负一个值,Balance一个值,Credit负一个值。小鹏说能。治皇说不行,宇阳说不行,不能,武中说可以。看一下。给你看一下负类,负类里边有一个有参,有一个无参的,有一个有参的,我就问你现在此类这样写行不行,有说可以的,有说不行的。负类中是私有修饰了,诶你看治黄说的很对啊,你看韦斌说可以来我说一下啊,这个废了,为啥呢?这个account number和balance这两个属性,它是不是在类当中是一个私有的属性。
06:07
我们曾经说过,私有的东西在我们本类当中可以访问,只要你出了这个类,我们就没有办法访问这些属性了,是不是,所以我们的这51行,还有我们的52行编译是不是应该报错呀?哎,所以这个时候,诶同学们这个理解吗?这个应该是理解呀,这是私有的呀,私有东西只能在本类中访问呀,你在别的类里边,你怎么能访问呀,就算你继承过来,你也没有办法直接访问。我说了你你你继承过来,哎,你没有你私有的对不对,你访问不了,访问不了,所以这块呢,我们,哎整个这个构造方法这块呢,我们来编译一下啊,编译一下来。Java c呢,编译一下,我们叫super test03.java走。好,我们发现啊,第51行和52行说act number和这个balance在什么count当中啊,是private访问控制,也就是这个问题,51和52对吧,这两行代码都是不行的,51和52你看标号是这个,那么接下来在这块的话,我们呢,写上去,注意啊,写上去。
07:17
注意了啊,私有的属性只能在本类中访问。明白吧,不能这么干,各位啊,来,我问大家,这两行代码是不是早晚还得让它执行?对不对,你不能说你这里不能执行,你就不执行了,因为你要给对应的属性赋值嘛,是不是,哎,所以说大家看一看,我们在上面有没有这样一个构造方法,大家看。这个构造方法是不是我们等于负类当中的构造方法呀,是不是有两个参数,这两个参数是不是通过它可以付给它,通过它是不是可以付给他呀?所以这个时候这两行代码是不是就和这两行代码长得一模一样,那如果说我想让这两行代码执行,是不是只要调这个构造方法就行了,所以我通过子类的构造方法去调用父类的构造方法,我们是不是正好就用上了,我在这里给大家重点讲的是举个例子,我是在恰当的时间使用super括号。
08:21
明白吧,这个所谓的在恰当的时间,诶,这个就是非常恰当的时间,你为了让这两行代码执行,而这两行代码就在这里。那你可以调复类的构造方法呀,有同学说老师我就不调,我就不调,你不调没关系,你不调这一块它会自动调super括号,还记不记得我们说过一个构造方法,第一行如果啥都没写,它会调用负类的构造方法,无参的调用你无参数的构造方法,是不是默认会给他一个now,默认会给他一个什么0.0啊。这个是不是我们的默认值啊,因为我们曾经之前学过,调用构造方法的目的就是给属性赋值,如果你无参构造,就相当于给属性附上是一个默认值none和0.0,那如果说你现在调这个构造方法,那就相当于你要给他附上一个指定的值,你要给他附上一个指定的值,将不再采用系统默认值,所以呢,你这样写。
09:16
哎,你去掉它没关系,它这儿会有一个super号括号啊,然后它会给这个属性附上值,同时给你这个属性附上默认值,给你这个属性附上默认值,因为你修括号调的是负类的无参数构导方法,但如果说你想给他指定值,指定值,那你就可以调这个构导方法,因为这个构导方法呢,是通过它给它赋值,通过它给它赋值,所以你在这里你就可以这样写。啊,怎么写super括号,是不是通过子类的构造方法调负类构造方法,你可以把这个参数给它传到这个位置上,然后紧接着你可以把第二个局部变量,就是这个构造方法,第二个变量给它传过来,传到这儿,那这样的话,这个构造方法其实调用的就是上面的这个调用就是上面这个构造方法,那么这个构造方法执行就把这个传过来付给他,就把这个传过来付给他啊就是这样的,非常非常之巧妙啊,非常非常巧妙,所以以上两行代码啊,以上两行代码在恰恰当的位置。
10:17
啊,正好可以使用什么呀,Super括号,然后a number和balance啊,通过子类的构造方法调用什么呀,父类的构造方法啊,父类的构造方法是这样的一个一个情况啊一个情况好了,那么这块的话。我们得改成这样,改成这样我们编译一下,大家看是不是就没问题了,是不是,那没问题之后呢,接下来我们在这块呢,怎么做呢?哎,呃,Account是不是或者说credit都可以啊,比如credit。是不是new一个什么呀,Credit account。
11:03
这样就实现了父类中私有变量可以在的一种访问了,嗯,也可以这样去理解啊,也可以这种间接方式的一种一种一种访问嘛,是不是那么调构造方法,你可以调这个吗。对不对,哎,你可以调这个构造方法,无参的,当然你也可以调什么呀,我们有参数的构造方法是不是,哎,调有参数构造方法来,那我们来看看啊,假如说这是调无餐构造,然后接下来我们再来一个,这是CAE吧,CAE,然后我再来一个啊叫cry account credit啊。Car,然后new一个什么呀,来叫cry account,接下来我们调构造方法,调哪个呢?我们调下面的这个构导方法,传这个参数,这个参数这个参数好吧,那这样的话我们怎么传呀,那传呗,那那怎么传呀,比如说账号1111是不是,然后余额是1万。然后紧接着呢,它这个嗯叫做信誉度啊,比如说0.999是不是,哎,那这样的话,我们在这儿呢,system.out.print line打印我们输出什么呢?输出我们的一个CAE啊,点get什么呀,Account number啊是吧?哎,这是一个值,然后呢拿过来。
12:15
我们可以加一个加号。然后直接加一个逗号,加一个逗号之后呢,我们CAE点什么呀,Get balance。Balance是不是它的余额,然后呢,再加上一个逗号,再加上什么呀,CAE点什么呀,哎,Get。Get credit啊get credit,把这个复制一下,然后呢,拿过来放在这个位置上,我来访问一下什么呀,Carr来carr来,紧接着CR啊一会呢,我们把这个内存图画一下啊,把这个内存图画一下。啊,我们尝试画下内存图啊来,我们先运行一下各位啊,应该能猜测到吧,Java c Java运行怎么运行啊,Java运行super test03走。
13:02
好,你看结果,一个是none0.00.01个是幺幺幺一万和0.99对吧?哎,为什么这个都是默认值。对吧?哎,为什么我们可以,嗯,把这个内存图给大家画一画好吧,嗯。
我来说两句