00:00
那这个工厂相关这个设计模式呢,咱们就说到这儿了,然后这个课后的话呢,这块有两个小的笔试题,诶大家来看一看,这两个题目的话呢,还是有坑的啊,那第一个问题说呢,我这定义那个接口,这呢定义那个class,两个里边都有两个变量,分别是X,名字都一样,现在的话呢,我有一个,呃,相交B的话呢,叫此类,相当于A的话呢,叫实现类了,既等于B实现了A。下面呢,这一个方法里边呢,输出一下X,然后下边呢,是用了一个这个这个对象,然后调一下这个PX,那问呢,就是说这个程序有没有问题,如果有问题的话呢,什么问题,然后以及呢怎么改,这个呢是挺隐含的一个点,或者说呢,是咱们这个讲知识的时候呢,没有涉及到的点,因为这都比较细致了,就啊通常咱们在开发当中呢,其实不会出现这样的问题,只是说呢,这个笔试的候呢,就是考的比较细致,那有什么问题啊。
01:03
对,其实其他位置都没有问题,要有问题呢,也就是这块呢有所担心,就是要么呢不知道是吧,要么的话呢,就是怀里这块呢,会有问题,就是这个情况了,那么这个位置为什么会有问题呢?到是对,就是这里边的话呢,我们负类中有X,接口中呢也有X,那么这里边呢,我们这个X到底用的是谁的,那对于编译器来讲呢,它没有提前做过区分,如果我们区分一下说你这个呃负类的优先啊,那就是认为就是先是负类的,但是可惜呢,没有,那杨ID呢,就是从我们理解上呢,这是一个,呃,我我暂时也叫子类吧,啊这是一个子类,这呢是它的父类,这个接口的话呢,其实是这样改的,就是它俩呢相当于在同一条线上,对,所以说我们这呢,继承于它,然后呢,实现了它这两个里边呢,都有X,那这个子类或者叫时间内这块,他就懵了,说我这到底应该是用哪一个。他还跟咱们说的这种情况不一样,以前呢,咱们提过啊,没提过啊,但是这个事儿的话呢,有同学问过,说呢,我这呢有一个直接负类,这呢叫X,然后呢,这个直接负类呢,还有一个负类呢,里边呢,假如也叫X,这呢是一,这呢是二,你说我这里边要用这个X的话呢,这是几一肯定是二嘛,对吧,肯定是二,怎么会是一呢?对,就近嘛,对吧,就近呢,就是咱们相当于我这里边,哪怕我写的是这次点X,你要是本类呢,没有定义过X,我是不是先拿它直接负类去找咱们,咱原咱们原来说过这个事儿,虽然说这个题没说过,但是这个知识点涉及到过,他先去负类去找,负类里边找到二了,那就停了,如果这里边没有二了,它再往上找才找到一的,对,是这样子的啊,但是这里边呢,对于咱们说这个负类也好,或者接口也好,它俩呢,你看成是对于我们这个子类或者叫时间类来讲,他们是同一条线上的,那这个时候呢,他就懵了,不知道该调谁了,所说这里边有问题呢,就是说这个X这样的一个问题。
02:55
为什么说我们开发中很少出现呢?咱们很少说呢,关于属性这块呢,去定义出名了。
03:01
这不是没事自己没事找事嘛,是吧,咱们这些属性的时候呢,那个名字呢,尽可能都是区分开的啊,名字都不一样,所以呢,实际开发当中基本上是不会出现这样的问题的,那这块呢,它就是考察一个相对比较偏的这样一个点了,那就出现这样的问题了,行,那这块我就不妨呢,在这里边,咱们把这个C呢给它粘过来啊,它这叫C了,我就直接粘过来一个C,然后把这代码的CTRLV粘过来,那此时呢,这块就报错了,放到这说我们这X呢,是按BI格,不明确的,不清晰的,不知道到底是谁的好,那有问题了,那现在假设,假设这个时候我们希望呢掉的是负类中的怎么调,对我们要调负类的话呢,咱们知道super super呢就是负类的意思嘛,这呢我们能够调它呢,其实就是个一了,那如果我想掉接口里的呢,super.super啊这呢有两个问题啊,第一个问题没有。
04:01
破点修破的事儿,就包括咱们刚才那会儿说我这是一个子类,这是一个父类,这又是一个间接父类,这里边X呢是一个二,这个X呢是一个一,咱们说了,这里边你写一个Z次点X,或者你写一个super点。X这个出来的都是二,前提是你这个子类当中没有定义过这个X啊,这个都是二,有同学就问说我能不能说让它除一啊,自己就开始想就super.super没有这样写法,这是错误的,那这个一呢,正常来讲在这个子类中是出现不了的,你要非要出现的话呢,那你就在你这个负类这里边,你去写个super,然后呢,你这块呢,在调这里边,这个方法相当于把那个一呢就也拿到了,只能这么着,况且的话呢,我们开发当中谁去写这个非得整这么多重名的了,首先这块呢都不要重名,只是说呢,出这个比试题的时候,他故意恶心你,然后给你整重名的啊,那么这块的话呢,首先没有super克尔点super克第一个问题,第二问题,你修破点修破,即使能写它也修破不到这个接口啥呀,你不是应该找你这个B类的福类去吗?你怎么也找接口去了呢,穿帮了的呢,是吧?嗯,这肯定也不行,那咱们去调这个接口里的X,对这时候呢,不要忽略一个问题,我们这X呢是一个。
05:18
全局常亮直接呢,我们通过接口就点这不就OK了吗?这就是零,这就是零,然后我们跑一下OK啊没有问题,这是没有问题的,当然了,当然什么意思呢?如果我们这里边我这写的X1写的X2啊,这个这个这两行代码我们先给它就粘掉,呃,这个注掉就是如果呢,你这负类或者接口中那个变量名根本就不一样,不一样的时候呢,你就我就写个X1,我就写个X2,这是一点问题没有,它自动的呢,这个X1他就知道这是接口里的,然后这个X2呢,是你这个负类里的,这都没有毛病了,那麻烦就麻烦在那就是说我这里删了啊,就是重名了,重名的话呢,那你只能是这样去掉了。
06:04
这个我再改回去,行,CTRLX,这是我们说的这个第一个问题啊,这个呢说是嗯,编译不通过,因为这个我们这个X呢是不明确的,那就是因为负类跟接口中重名了,行,那接下来看一下第二个问题,这个问题啊,我就先不往这个eclipse中粘了,一粘的话呢,有没有问题看都看出来了是吧,硬看。那你看这呢,是一个接口一个play方法,这是一个接口一个play方法,这俩方法还都一样,然后现在呢,我定义了一个接口,这个接口呢,诶把这两个接口呢,都给继承了,都给继承了,都给继承了,然后这块呢,它还没有重写。嗯,知道这个情况就行。这是这个问题。嗯,这呢是这相当于是我们这个里边声明的一个属性,对吧,嗯,知道这个事儿,那这个属性谁呢,在这有个报报呢,Implements实现了我们这个接口。
07:10
定义了一个属性,一个get方法,一个爆构造器行,然后这有个play方法,因为我实现这个接口了,这个接口里边你就得考虑它有没有抽样方法,我这这个play方法相当于是个重启,然后这块呢,做这样一个操作行,看看有没有问题。对,这个大家不一定非得要求说,一定得做出来,就是你现在怀疑的或担心的都可以说一说,这时候担心什么问题啊。对,不知道重写哪个,就是我这个有个play方法,按说呢,就是重写他这个这个这个实现呃,接口当中的方法了,但是接口里边呢,你发现它继承了两个接口,这两个呢都要play,可能担心的就是这个play呢,是算重写它了,还是算重写它了,还是说两个都算这是一个担心是吧,那事实上呢,这个问题,嗯,都算了,都算了,就是谁让你这俩重名了呢。
08:16
你要你这个呢叫PLAY1,这个叫PLAY2,那这儿呢,我们需要写一个PLAY1,写个PLAY2,但是你恰好你这俩方法呢,还都是一样的,那一样呢,在我们这儿呢,我就写一个,其实既认为是对他的一个重写或者要实现,又认为对他的一个重写或实现。就是这样个情况,所以这块呢没有问题,那别的位置看看有没有问题。Bo怎么了?这。改变了对象了,不可以改吗?他应该是静态的,不对的,他应该是final的对吧,诶看到了。
09:03
这个说的是对的。同学没反过来呢,是你看我这里边呢,我一上来就报,说明前面没有声明变量,说明这个变量提前已经定义过了,哎,我我这说成叫变量了啊,就是这个量的话呢,说明提前定义过了,这呢是用的,那你就得考虑在哪定义的,你看哦,在这个接口中定义的,那我们实验的接口自然呢就拿到它里边这个结构了,那拿到这个结构呢,我这就直接用了,那你这时候呢,要要想一个事,这个前面呢,省略了好多东西,Public static final都给省了,这块呢违反了。Final final,因为呢,我们这个是一个常量,你就不能再去用了,所以这块这个错了,这个的话呢,其实非常的隐蔽。非常的隐秘,就是你看到这个它就可能还大家不敏感,接口里边呢,目前我们讲的都是常量,所以这块呢,这个一定要小心一点,就是加上final了你可能就知道了,不加你可能就没有感觉了,这呢它的一个陷阱算是,那这呢是两道比较简单的一个笔试题,哎,就这样子啊。
我来说两句