00:00
好,这道题的话呢,也是一个关于多态性的一个代码题了,涉及到这样的几个类,第一个呢叫geometric object叫几何图形类,然后呢,它的两个子类circle和这个my rectangle叫句型了,里边呢相关的属性构造器和方法,我们呢,首先呢把这三个类呢创建好,然后接下来呢去创建另外一个测试类啊,再体会它的一个使用,首先我们去造它的副类,这呢我们再新建一个包。哎,EX21新建一个具体的class啊,只有metric这个object这样的这个单词看看别写错了,OK finish这呢是作为一个负类出现的,负类当中这个井号呢,是什么权限啊,Protected对这个string类型的color double型的weight。Protected,死钝型的color double类型的weight,这样wait你可以理解为叫权重,接着提供这个构造器,对这两个属性呢进行初始化盖的方法find叫求面积行比较清楚,Al shift s先提供get set方法。
01:19
提供勾搭器。构造七呢,提供这个代餐的,OK super呢我们就不删了,这个你删了它也有咱们也讲过super了,接下来求面积的方法,Public这个我们返回值呢叫find area,这个它这里边呢也提到了,也是需要返回的,那求面积大家想我现在呢,写的一个叫几何图形,那你这时候你这个你说这个求面积怎么写啊,是不是写不了啊,因为这个几何图形不一样,它的求面积公式那千差万别,甚至有些呢,你都不可去直接呢去定义它的一个面积公式啊,你就这两个图形咋求面积。
02:01
只能是用微积分了,对吧?啊,你这时候整一个这个坐标器,然后呢,它呢有具体的两个函数,比如说去描绘了,然后你只能是这个,呃,这是从从从这个范围,这是A,这是B,复习一下这个微积分啊,这A这是B,然后呢,这是你上边这个函数,然后这个上边函数,比如叫F这个函数,下边函数叫这个函数,这两个函数相减,然后DX一下,然后积分一下,这不就出来它面积了,不用回去补了啊嗯,这就是微积分,你只能这样做了,因为微积分呢,只能解决就是只要你不规则无所谓,你是一个凸图形,凹凸形都可以算,这就是微积分来做了,然后我们讲的那些呢,就是正方形啊圆呀,这都是非常规律的一种计算方式了,这种公式出来以后呢,我们用微积分的一算,发现跟这个公式一样,所以大家呢,只需要记公式了,就那这个时候呢,没法写,那只能是现在先默默的写一个,比如0.0,只能是这样来处理了,那反正呢,你这个方法具体呢,是某一个几何图形,是不是都需要对这个方法进行一个重写。
03:01
写啊,嗯,对的,其实从这出发呢,咱们后边呢,讲这个抽象性呢,大家就更好理解了,到时候我们就把这个方法呢,给它做成一个抽象方法啊,现在你没听过就先不用管了,到后边我们讲抽象的时候呢,会过来呢说一下他的这个问题,那父类呢,我们就暂时呢写成这样,接下来的话呢,看这个子类,子类呢,首先是一个circle circle呢作为它的一个子类,Double型的radius,私有的,然后构造器对父类中的两个属性,还有自己呢这个radius进行初始化,Radius的盖方法重写泛行比较清楚。定一个叫circle,然后在这个位置呢,大家直接可以呢,把我们这个负类呢,就加上啊这metric object选中OK finish直接呢就这样子了,那此时呢,马上报错了,什么原因啊,对构造器的事,我们此时呢,Circle是一个默认的空参的构造器,我们负类中没有定义过空参构造器,我们调super波空的时候呢就没有了,所以我们可以呢显示的去定义一个构造器,它这呢给我们提示说这样去造,你点一下先,这呢就是我们显示掉负类这个指定构造器了,首先先不报错了,我这呢去定一个叫private double型的radius,然后我们把这个属性呢也在构造器当中进行一个初始化。
04:22
那除了这个之外呢,CTRLD一下,我们在C4.readers等于readers好搞定,然后呢,提供这个私有属性的概测方法,选中分重写findl方法两种方式,一个呢直接这样TCTRLCL一下。这是一种方式啊,这个我们此时return圆。那我就不写那个派了,直接3.14乘以re,第四再乘以READ4搞定,这呢我们就重启了负类中的这个方法,这个类呢就写完了,下一个呢,叫做句型mery tangle,有宽有高,构造器跟我们这个circle呢类似。
05:10
最难的呢,就是这里边儿这个单词不好写来。是这样吧,少个c reangle,行,然后呢,这个位置BS直接呢,你就指明叫geometric object finish。还是过到期的事儿点一下。然后我们在这呢,去补充自己的属性,Private double型的这个叫宽行,然后高,接着呢,把这两个属性呢,在我们构造器当中也进行一个初始化。那在这个位置呢,Ctrl d ctrl shift回车,然后这次点Y等于。
06:03
诶,不是的,这个等于啊,Y z.hat hat好搞定,接着呢,提供这两个属性的盖赛方法,Out shift s get和C。然后呢,重写这个求面积,第二种方式呢,直接find out斜杠,哎,重写这个方法,这个位置呢,直接return这个Y乘以hat好搞定。没搞定得保存一下得好了。写完以后,我们下边呢,来看这个测试测试把它呢,CTRLC这呢要写一个呢,叫geometric test一个测试类。新建一个测试类。只有嗯,只有my test。请。
07:02
你说。那上面这块呢,我们都已经定义好了啊,这个就删掉了。好,这呢提供了,呃,这个要求呢,我们去定义两个方法,第一个方法叫equals area,判断两个对象的面积呢是否相等啊,那我们这时候呢,CTRLC一下,这常写public,返回一个布尔类型叫equals area,比较两个对象,对象呢就是我们说的这个几何图形这个对象,所以我们这呢,把这个几何图形作为我们这个参数传到我们这个方法当中,这呢是第一个对象,然后再传一个第二个对象。这两个对象的比较面积是否相同,那我就直接呢去return了O一点它的find area是否等等于o2.findarea。能能理解吧,对,比较这两个面积呢,是否相等。
08:01
这是我们说的第一个方法。这样测试。CTRLC在这呢,我们简单做一个说明,再接着呢写第二个方法叫display geometric object,这个方法的话呢,是显示对象的面积。显示那我直接就word了,哎,这里边呢,需要我们传进来这样的一个类型。好在这里边呢,我们直接呢去调一个c out说面积为。调我们这个O点范的这呢两个方法呢,就写完了就写完了,然后下边呢,我们来具体做这个测试,写个没方法,那这两个方法呢,要想被调用都得创建当前类的对象。接着呢,我们去test来调啊,调的话呢,你看你先调哪个,比如说先求这个面积是多少,这个事儿要想能够执行,那你得需要传一个几何图形,那几何图形呢,咱们这儿呢,提供了两个,一个是圆,一个是矩形,比如说我们造两个圆来造,造一个圆C1等于new,一个circle啊构造器呢,你记不清楚了,你out斜杠一下,这常就给你提示了啊是长这个样子的,首先呢,半径2.3,比如说color颜色啊,写一个比如。
09:31
White白色这个权重,权重的1.0,这个权重在我们这块呢,嗯,没有太多实际的意义了啊,就是一个变量的情况了,然后这是第一个,我们这呢,就调一下这个C1,显示了一下它的一个面积,那类似的话呢,你可以再造一组CTRL的像C2是这个C2,比如我这呢,改成一个3.3。这两个呢,面积是不一样的,我们执行一下。
10:00
啊,这呢是它的面积,这个是这个面积。好面积呢就不同,那其实在这块的话呢,已经体现了我们说多态性的一个使用,我们声明的时候呢,是一个负类的类型,那我们实际调用的时候呢,你是放在这个牛车口这里边有这个参数。参数这块我就简写了啊,我就用个点点点来表示了,这呢就是一个多肽啊,所以说呢,我们开发当中,大家其实会发现多肽呢,大量的被使用,就是因为这个方法的形态的时候呢,我们经常或者说很大概率的情况下,我们传的呢,都可能是这个类的一个子类对象,只要这样写,那就一定是多肽了,而且呢,你下边呢,你写了这个变量,你后边肯定会用啊,用的时候呢,咱们说。属性呢,咱们习惯上呢,也都是给它封装起来,用概率赛的方法,说白了就是我们这个对象,咱们第一天讲课的时候说有了对象以后,我们调对象点属性,对象点方法去完成功能,但是更多的时候呢,咱们都是通过调方法来体现的,因为属性呢,我们也给他get set啊,那只要是你在这个方法当中,你用这个O去调方法,你要一调方法这个时候的话呢,就考虑你子类如果重写过。
11:16
这是不是就一定是掉子类重写的方法了?对,这就是虚拟方法调用。所以翻来覆去多态性我们就提到提提到了两个事儿,第一个呢,就是它的这样的一个形式,这叫多态性,然后第二个呢,就是里边调方法的时候呢,都是子类重写的方法,哎,一定是这样子的,好,这呢我们就计算出来它俩这个面积了,下边的话呢,我们去比较一下这两个圆的面积呢是否相同,我们调这个叫equals area,把我们这里边这个C1C2呢都可以放进去啊,CTRL1这个我们可以返回一下,叫is equals。哎,这个我们可以做一个输出,是这个C1和C2的面积是面积是否相等,或者我们这个加个冒号,哎,加上一个叫is equals。
12:18
这样就行,那此时呢,它俩面积显然是不相等的啊,这就是个false了啊,我把这个呢,改成也也是一个3.3了。那这呢,就是一个出了行,此时的话呢,我用的都是这个C1和C2,你也可以呢,再测试一下咱们这个几何图形,呃,这个这个句型啊,Mary tle这个也一样啊啊Mary tle。Al斜杠下,然后呢,直接写一个比direct拗一个mery长out斜杠勾造器长这个样子宽宽2.1,高3.4,颜色红色,权重2.0等等,那这块的话呢,你接下来也可以去显示它的一个面积是多少。
13:07
哎,这呢,你可以也去调这个叫这样。啊,此时呢,体现的都是多态性,哎,因为这时候掉的都是你这个句型自己所特有的这样的一个,哎,这个不是特有的,是重写父类中的泛瑞方法,哎,你会看到这里边都是不是0.0,你要0.0的话呢,这就成了调这个了,不是说明呢,都是我们调的重写的方法,行这个呢,也是咱们作为这个多态性算是一个基本问题了,这个基本问题也是咱们最常用的一种使用情景。行,后边这个关于,呃,这个变量和我们这个C1C2这个比面积,我这就不比了,这个你就把它放进去比一下就可以了,体现的都是多态性的使用,这呢也是一样,调的时候呢,放的都是子类对象。行,那这块呢,我们就是这个练习的一个使用,大家呢下来呢,把这个刚才说的这个练习五的这道题,还有练习六的这道题呢,都可以呢,自己去亲自写一写,体会体会这个多态性的使用。
我来说两句