00:00
那下面的话呢,我们具体的就来写一写,这个叫重载,包括它这里边儿的一些细节,好首先呢,咱们看到这个定义,这个定义里边提到了,说在同一个类当中允许存在同一个以上的叫同名方法,只要参数个数或者参数类型不同即可,有点长,咱们呢给它归纳一下,归纳呢我们就来了一个这个。口号是吧,或者一句话呢,我们来概括说,满足这样特征的呢,就叫做重载,哎,我这呢,归纳为叫两同一不同。好,那两同指的是哪两同,同一个类,哎,对,然后呢,相同方法名,哎这呢就叫两同啊,那么一不同,对这个一不同呢,就是叫参数列表不同,哎,那么参数列表不同,它又分成了这个,呃,具体的这个情况啊,哎,比如说叫参数个数不同,哎这个这个就算了,这就算啊,只要个数不一样,那就可以,你这有俩,我这有仨,那就算不同啊,还可以有诶参数类型不同。
01:15
啊,你那呢,放了一个int型,我这放了一个string型,咱俩呢,就算是不同。啊,所以呢,只要满足这个两同一不同的,我们都把它叫做重载啊,首先呢,你得是同一个类的啊,这样才行,那很自然的,咱们下边呢,就要举一些例子了。好,比如public word,我这呢叫get sum,我求两个数的和两个int型的数的和,哎,我这呢,直接sit out I加上个G,好,这是它啊,然后再来。哎,Public我就要get一个sum,同名的同一个类的double第1DOUBLE第二,这个方法体呢,我就不写了。因为咱们是否是重载跟防滑体也没关系。
02:03
啊,所以就不管了啊啊,这是它这俩呢,很显然呢,是重载,你可以归结为叫类型不同。啊,是这种,好,我再来public we get some,大家看这样啊,我这呢写个string s,后边呢写个in性I。这个跟上边呢,是不是也叫重载啊。对,Public,我get sum我呢先写后写string s,这两个算不算的要参数列表不同算,注意这个也算。嗯,就是我们调方法的时候,我们调这个get sum的时候,如果呢,你要是先传的是个string,后传的是一个整形,它就调的是它啊,你要先传的int,后传的钝掉的是它,这个呢,前后我们说也有顺序的要求的啊,所以在这块看来的话呢,它俩算是不一样的啊,那就是说如下的四个方法,哎,就构成了重改。
03:09
这呢,都满足我们刚才所说的叫两同一不同。那那我接着来写,大家看这个行不行,Public返回一个int get一个some in一个I in一个接,这样return,先暂时写一个RETURN0,嗯,我先写RETURN0,你你觉得这个方法跟上面的能不能构成重载。哎,能不能就完全看定义啊,同一个类没问题,相同方法名没问题,参数列表是不是跟这个一样了,所以这个呢就不行了,哎就不行了啊好,这个呢,我们先注释一下,这不可以,然后呢,这个呢。Public,我这写个Y对吧,Get一个sum,我一个M一个N这样的。
04:06
哎,还是看定义是吧,同一个类同个名没问题,然后这算不算跟他这个型态列表不同啊,不算对,就是你这个参数名其实无所谓的对,比如我们调这方法,我写一个五写个三,嗯,传给阿拉传给接了传给M传给这这无所谓的啊,哎,他仍然认为这个和这个是一个,算是这个形态列表相同的啊。所以这个呢也不行。啊,这个也不行,好接着啊,我这呢把权限改的比较小一点,哎,这我写一个in型的一个,比如I in的一个接这样行吗?对也不行,就是完全看定义,嗯,同一个类同个名参数列表一样了,跟这块没有关系啊,这个也注释掉。
05:04
哎,包括呢,就是这个方法体,你说要我再写个方法,这个跟他都一样,方法体不一样啊,是不是也不算啊,哎就是完全大家呢,就按照定义来判断,所以我们这块呢,举例完以后,下边呢,哎在关于这个判断啊,哎判断是否是这个方重载啊啊这个我们说跟方法的权限修饰符。嗯,返回值类型。啊行参变量名啊,包括呢,这个方法起都没有关系,诶这个大家一定要注意强调一下啊,跟这些都没有关系,你就严格的按照咱们这个定义来就可以了。行吧,呃,这就严重按照这个定义来去判断一下啊好,这是咱们说的这个呃概念啊,嗯,那么呃你可以再去定义其他这个类型的,比如呃,其他这个方法名的,只要方法名跟它不一样,那就更不是这个叫重载了啊呃,那个我就不去再去测了啊呃,这是我们说的,说跟这些呢都没有关系,嗯那么这块呢,还可以体现什么的情况呢,这样啊,我们下边写个没方法。
06:25
哎,我试着来对它呢进行一个调用啊,哎,我CTRLC一下CTRLV,这呢就是一个test等于new一个啊TRLV在调用的时候呢,大家可能会看到这样的一些小细节的点啊,这个test呢,我写一个叫get sum,我这呢,如果传的就是一个一是一个二,那这时候呢,问咱们调的是是这个第一个方法还是这个第二个方法,还是第三个第四个呀。对,很显然掉的是第一个啊,掉的是这个get sum啊这个里边呢,我就这样先写个一吧。
07:00
然后下面这个CTRLC,我这呢写成一个二啊,这我可以写成个三,诶这写成一个四,哎,保存一下啊,那我们执行。哎,出来的就是一,哎这个大家应该都理解啊,那我要是把这个注释掉,你说我们这个程序会不会报错呢。你发现你看我注入掉以后是不是也没报错啊,嗯,那这时候输出的是几啊,哎,就变成二了,这个在实际开发当中呢,可能确实还出现过这样的情况,这个能理解吧。这个跟咱们前面讲的某一个知识呢,就融在一起了,什么知识啊,诶自动类行提升,嗯,就是当我们这个打开的时候呢,因为你有确定的是两个int型的,那我就往这放了,但是你要是这个没有的话呢,那我就再找看看有没有跟他也匹配的,其实我们这个int呢,就付给了double了,这个二呢也同样的道理。
08:01
诶,所以呢,它执行的就是这样的一个情况了啊,这个大家后边呢,写代码的时候呢,会看到这样的问题啊好,呃,这是这个事儿,这个呢,我们打开了,那他就优先的去选择这个结构了啊嗯,这是一个情况了,嗯,然后咱们下边呢,想总结一个事儿。哎,想总结个什么事呢,这个还是稍微有一点难度的,或者这个事儿呢,其实也大家只要理解清楚的话呢,还是一个挺好的一个事儿,什么呢?就是我们在通过对象调用方法时,对于咱们这个解释运行的时候啊,咱们想调方法,调方法的时候呢,咱们通常呢,先去点的时候呢,先写上这个方法名了,但是现在来看的话呢,同名的方法可能有很多。你我想get sum好多都叫get sum,那当然咱们调的时候呢,你是不是给这个解释,运行的这个解释器得给他一个明确的指令,我想调的是哪一个吧?你要给他的指令不明确的话呢,首先说不满足算法的那个确定性了,那其实的话呢,就是你这解释器他不知道该指定哪个,那你这个程序不就乱了吗?所以呢,我们写的代码一定会给这个解释器一个非常明确的指令,你要调哪个方法。
09:18
但是现在的情况就是说可能会有同名的方法,那就意味着呢,我们想确定去调某个方法的时候呢,不能光依赖于方法名了,还得看别的东西是吧?啊,这就是说我们在通过对象调用方法时,叫如何确定啊某一个指定的方法,原来的咱们可能说看方法名就行,现在说光看方法名不行了,因为可能有重载的,所以呢,首先我们关注的第一个点啊,当然也看方法名,就先在关注的叫方法名,那看完这个方法零以后还不行,还得怎么办呀,是不是还得再看这个参数列表啊。
10:06
还用看别的不?不用了,哎不用了,就看这两个就行啊,就是呃,我们看完方法名以后说呀,可能会有多个,然后再看这个参数列表,那恰好呢,方法名一样的呢,都叫重载了,恰好呢,咱们还说了,说你这个重载的方法呢,参数列表是不是一定不一样啊,哎,那你这也不一样了,我们你调的是哪一个,这不就给了我们解释器一个非常明确的指令,你想调谁啊,是这种。啊哎,这呢,我们就非常明确了,实际上换句话说啊,其实是我们先想做这个事儿,然后呢,我们回过来才做这样的要求的。咱们就是让程序执行的时候呢,你得明确的告诉这个解释器,你想调哪个方法,或者编译的时候,其实就能确定了啊不管是解释器了,你看咱们编译的时候呢,我这儿写就没报错,我这要写这个三。我再再写个三是不是就报错了,因为我编译的时候,这时候就就已经他在找是哪一个方法了,我就根本没有找到,所以他就报错了啊,就没有找到这样个方法啊行,相当于呢,我们编译的时候呢,就在确定是哪一个方法了啊,就是我们想确定是哪个方法,所以呢,哎,我们先通过方法名,但是呢,呃,张小雷也写说哎呀,我这个好多功能都一样啊,都叫排序,那大家都叫salt吧,那你要都要salt,那你得严格说一下,餐桌列表就不能一样了。
11:27
哎,所以呢,咱们才有这样一个规定,然后呢,把这样的方法呢,起个名吧,啊叫重载。哎,其实就这么回事啊,其实没啥大不了的啊,哎,大家呢,就明确这样一个问题,哎,我们呢,确定这一个方法的时候呢,是通过方法名和参数列表,这个要明确以后呢,其实你就可以去想这个事儿了,如果这个方法允许存在。你会发现它有问题,对,如果他要是允许存在的话呢,你想想对我们调这个get sum好好多,然后呢,看清单列表,你会发现这个和这个是不是一样了,那这时候我写这个五写个三,这时候编译器就懵了,说你是想输出呢,还是想返回呢?
12:10
他都不知道了,哎,你别说他不知道,你你都说不清楚是吧?哎,你更别说给给他一个明确的指令了啊,哎,其实也是因为这样的原因,所以呢,咱们才不允许它出现啊,那就让我们这个重载呢,就变得合情又合理了,不是说呢,F强调的说我非得做这样这样这样的规定,是因为呢,我们要是做这个事,你要去定义这个语言的话呢,你也得这样去写是吧,你也得这样去想啊,所以呢,就很合理好。说完了,这就是咱们说的这个重载的内容啊。
我来说两句