00:00
嗯,好了同学们,那么接下来咱们就可以解释一下我们这个之前遗留的一些问题了。对吧,之前我们好像还遗留了一些问题,我不知道大家还记不记得啊。遗留的哪些问题没解释?当时还记得吗?啊,因为我们说了叫多肽的这个,呃,开发多肽在开发中的作用,只要说把多肽学完之后,我们之前有些东西就可以解释了。我解释之前遗留的问题。啊,遗留的问题。这个遗留的问题是什么?嗯,我们找一下我们这个程序啊,找一下我们这个程序,应该是在方法覆盖这一块。是吧,那就不是这个找一下啊哪个。我记得写过一个。来关掉这个吗?第二个例子吗?来看一下啊在这。对吧,哎,有这么几个东西。
01:00
上面这个我就不用说了,对吧,方法覆盖只是针对方法,方法覆盖,方法覆盖我们说的是方法啊,说的是方法跟属性是没关系的,你不要往属性上扯啊,我们说的是方法覆盖,那这块我们把它拿过来。拿来之后干什么呢?我放到这。这个是之前我们遗留的。问题啊,然后这个呢,我就先关了它了。我们把这些遗留的问题处理完之后啊,我们就可以继续往下讲super了。Super。Super学完之后呢,有一些问题同学们就可以,诶就可以怎么着解决了啊,就可以解决了。嗯,昨天有好几个同学问我super的事儿啊,就是super括号怎么着怎么着怎么着的,咱们今天呢,就把这个事儿说一说啊,Super肯定已经也能讲完啊,也能学完。好,咱们先不着急啊,先来看一看这个遗留的问题是吧?来遗留的问题说私有的方法无法覆盖构造方法,这个就不用说了。
02:00
构造方法不能被继承,所以构造方法也不能被覆盖啊,不能被继承的自然是不能被覆盖的,这个也不用解释啊。我们来测试一下。啊,以下的这两个问题,私有方法无法覆盖啊,方法覆盖只是针对实例方法,静态方法覆盖没有意义。我们先看这个吧,为什么说静态方法覆盖没有意义,咱们尝试一下啊,尝试一下覆盖一下看看怎么样,好吧,来点右键,我们新建一个什么呀,叫做overre overre啊TEST05。我们public class over test05。好,我先问大家一个问题啊,你们承认不承认这个就是多肽,就是方法方法覆盖。
03:06
啊,需要和多肽机制联合起来使用才有意义,这句话你理解吗,各位?我为什么要这么说?你现在思考一下,就是方法覆盖需要和多肽机制联合起来才有意义。为什么这么说?如果单纯只是有一个方法覆盖的话。没有多态机制的话,我问大家。你这个方法覆盖有意义吗?是不是又回到昨天那个问题上?林动问问的那个问题,我为啥要方法覆盖?我写一个全新的方法,跟之前方法不一样,不行吗?可以吧?大家思考一下,这个你们能不能想明白,就是方法覆盖需要和多态机制联合起来。才有意义。就是说我们animal a等于new一个什么呀?Cat a点什么呀,我们要的是什么效果呀,要的是什么效果,各位就是编译的时候。
04:12
是吧?Move方法是谁的animal?运行的时候自动调用到哪儿啊,子类重写的什么,哎,重写的目方法上。是吧,我们要的是不是这种效果呀。假如说现在只有方法覆盖,没有多态机制。假设啊,没有多肽机制。只有方法覆盖机制。你觉得?有意义吗?哎,这个文杰总结的非常好啊,没有多肽。方法覆盖,可有可无。没有方法覆盖多肽就调不到方法,其实也是这样一个道理啊,就假设没有多肽机制,只有方法覆盖机制,你觉得有意义吗?
05:11
没有多肽机制的话,方法覆盖。可有可无啊,咱用一下这个文杰同学的一个总结啊,没有多态机制的话,方法覆盖可有可无,可以有也可以没有啊。对吧,你完全可以,你说当分类方法已经无法满足此类的业务需求的时候。啊,没有办法满足此类的业务需求。啊,那这块的话,我们完全可以写新的方法对吗。大家再想一想。对吧,没有什么呀,多肽机制。方法覆盖也可以没有。啊,如果有新的什么呀,需求。对吧。如果说如果父类的方法无法满足子类业务需求的时候,子类完全可以定义一个全新的方法吗?
06:13
是不是,哎,完全可以定一个全新的方法,所以说我们的。嗯。不就是方法重载是一样吗?对。对方法重载,你也可以往方法重载方向联想也你定一个新的方法呗,方法名,嗯,怎么说呢,跟方法重载关系也不是特别大啊,也不是特别你起一个,你起一个新的名字不行吗。对吧?哎,你起个新的名字不就行了吗?是不是,哎,你先想想啊,先想想来我们方案覆盖需要和多态机制联合起来才有才有意义啊,一般都是这样这样去连在一块说的,方法覆盖和多肽是联合起来说才有意义的啊好,那我们来看看静态方法存在方法覆盖吗?
07:04
方法重载只是为了方便啊。嗯。来,那么接下来咱们继续看,比如说在这里呢,我写一个什么呀,Class a啊。嗯,写一个什么呢?Animal吧,还是animal吧,啊,这个好使好用啊,然后接下来有一个class k去继承谁的animal。Extend啊,继承animal,然后现在呢,在我们的这个animal当中啊,有一个方法是静态方法,Public static void叫do some静态方法,然后system out there print line打印,我输入什么呀。哎,我输出一个叫do,叫做animal do some方法执行很简单啊,负类的静态方法,我现在尝试在子类当中重写啊,来尝试在子类当中对父类的静态方法进行重写。
08:04
那么我重写这块怎么重写,我把它拿过来,拿过来之后呢,我直接放到这个位置上,放过来之后呢,接下来我这边叫什么呀,叫做K的do some方法执行啊。好了,那么接下来呢,我们这边要注意了,静态方法可以使用引用点来调用吗。我先问一下大家,这个这个问题还记得吗?静态方法可以用引用点来调用吗?只能用类名来调,用处不大。静态化可以使用引用点来调用吗?可以是吧,虽然有引用点来调,虽然使用引用点来调。来调用,但是和对象无关对吧。
09:00
对吧,还记不记得空指针异常。你就现在animal是不是A,我new一个什么呀?Animal啊new new new new一个啥呀,New一个cat,这是不是多肽对吧?a.do输输。各位告诉我这个输出结果是啥?这个输出结果是什么?这不多肽吗?上吗?这个方法走这个还是走这个。底层对象是cat。你走下边,那还是上面那个。注意了,静态方法跟对象有没有关系?啊,静态方法和对象无关,对不对啊。
10:00
静态方法和对象是不是无关啊?虽然使用引用点来调来调用。但是啊,实际运行的时候。还是什么呀。还是爱点什么?所以这个方法的执行。来看一下啊。Java core。T05.java。Java运行ore t05。大家看是不是animal do some方法执行,也就实际上是这个类当中do some方法执行,对吧,和这个是不是。没有关系啊,和他没有关系,所以说我们在谈静态方法的时候。
11:01
一般不说覆盖的事。一般不说覆盖的事儿啊。你看你这个程序,它为什么静态方法不能不存,不是说不能覆盖各位啊,我们有三个叫就不存在就不存在啊,这个不能说覆盖不覆盖的事儿啊,就是说。你看它覆盖不覆盖,如果说你调K它会调哪个呀?你调K这个类的do some,你会调哪个,各位你想想。掉cat的萨吗?他会执行谁,他会执行下面那个还是上面那个,那肯定会执行这个对吧?来我们编译一下。编译一下执行是不是cat的do some方法执行,貌似给人的感觉好像说我现在此类去继承父类之后,虽然把这个方法继承过来,但是我会执行我cat里边那个do sum,貌似说是呃,覆盖了,但是这个呢,我们一般不说是覆盖,不说是不把它纳入到方法覆盖里边。啊,因为我说方法覆盖一般和多肽机制联合起来才有意义。
12:01
就是方法覆盖跟多肽是不分家的,这点你要注意啊,主要是因为方法覆盖和多肽和多肽不能分开啊,不能分开谈谈这个事儿,那你多肽自然就和对象有关系,对吗?多态自然就和对象有关系了,而静态方法呢?静态方法的执行不需要对象。所以所以啊,一般情况下,我们会说静态方法叫做不存在方法覆盖。不存在方法覆盖,我们不探讨静态方法的方法覆盖,就是不探讨什么呢?静态方法的覆盖明白吧?哎,不探讨静态方的覆盖,就你当然如果用K去调do some,你用这个animal去调do some。
13:02
明白吗?哎,你这个animal调度some肯定指定那个,如果子类看调度some肯定执行子类的呀,对吧,表面看着是哎老师这不是覆盖了吗?是不是,哎编译去运行你看。不过我们不把这个叫做方法覆盖,各位我们说了方法覆盖和什么联合起来啊,和这个叫多肽,它是不能分开的。你你好好考虑考虑,多肽是不是负类型引用指向子类型对象,我说这句话的时候,其中有俩字叫对象嘛,是不是你对象不一样,导致你最后调的方法不同。是不是,哎,所以呢,你这个静态方法执行,你跟对象压根没关系啊,你好好看,Animal a等于new k,你a.do some的时候,其实跟K有有半毛钱关系吗?没有。它执行的结果是什么?是animal do some,是执行这个,不是执行下面这个,所以说我们认为静态方法的覆盖我们是不讨论的,我们是不探讨的啊,不探讨这个东西的,所以说方法的覆盖啊,这里有个笔记是怎么说的,方法覆盖只是针对实例方法。
14:01
静态方法覆盖没有意义啊。实际上没有覆盖吧,而引用只能调用父类的,想调子类的,必须用类名来调。想调此类的必须得对肯定的,肯定的你没有覆盖,你可以这样理解啊,可以这样理解,总之大家知道方法覆盖呢,只是针对于我们的什么呀,哎,实例方法各位啊和静态方法啊。无关,和静态化无关啊,这是因为方法覆盖通常和多肽是一块儿的啊。这是因为方法覆盖通常和多肽联合起来。我以后把方法名都写一样的行吗?那干嘛呀?为什么所有方一样啊?写一样不就混淆了吗?你说你这个是求和。下边那个是算乘积,结果你两个都叫都叫求和你这个别的程序员看到这个方法名。
15:06
不就很头疼了吗?对吧,他就不知道这个方法是求和的哦,那个方法是干啥的,因为有的时候我们要见明之意嘛,根据你这个方法名,我们要推测出你这个方法有什么作用吗。对吧,以后要把方案名都写一样的就麻烦了啊,就麻烦了,该一样的时候一样,不该一样的时候不能一样啊。方法名该一样的时候可以一样方法名。不该一样的时候啊,就不能一样啊,不能一样就不是说了吗,方法。不是覆盖吗?嗯,覆盖你什么,覆盖五中,你想你想表达什么。覆盖是发生在父子类之间的。父类和子类之间的。嗯。你以后要把方案名写的一样,是说你同一个类当中的方案名一样。
16:01
还是说两个类当中的方法名一样,想表示什么?方法名一样,不是覆盖。嗯,谁说的呀,覆盖的条件是啥呀?五中覆盖条件是什么呀?这懵了,有点儿。覆盖的条件第一个条件是什么?具有继承关系的父子类吧。方法名一样啊。参数列表一样啊。对吧,返回值类型一样啊。你光发发名一样不能说是覆盖啊。
17:01
静态的调用时用类名点对。静态以后调还是得用类名点啊,你用引用点你你不对啊,你用引用点这个我不说了嘛,会让成全产生困惑吗。是不是哎承销产会产生困惑的,各位啊,会认为你这个方法是一个什么方法,是一个实力方法。实际上它是个静态方法,静态方你就应该用类名去调,不应该用什么呀,我们的引用点去调嘛,是不是。行,那五中这块你还有什么问题,咱们这个私聊也行啊,私聊也行,好吧,现在我就把这个关于方法覆盖啊,这块静态方法的覆盖啊,我给大家提了一下,我们一般不谈静态方法的覆盖啊,我们一般说的是实例方法啊,因为呢,我们的方法覆盖和我们的多态机制是联合起来使用的啊,联合起来才有意义。
我来说两句