音频文稿:
    接口和抽象类的区别,这个问题呢,对于刚入行不久的程序员以及啊,入行时间比较长的程序员,其实这道题呢,面试官都有可能会问啊,但是呢这道题,其实对于这两类人人来说,其实他的这个,面试官期望得到的一个答案,他是不一样的啊,其实对于我们刚入行不久的程序员,这道题,主要考察的是你的这个加瓦的基础,语法这一块到底掌握的怎么样,主要就是看你在平时写代码的时候,够不够细心啊,但是对于中高级程序员来说,他希望考察的其实不是,这种不是这些表面上的东西啊,其实主要是考察你,对这个问题的本质是否能够抓到啊,考察的是这么一种能力,为什么这么来说呢,我们来看一下这个接口和抽象类啊,那么接口和抽象内,我们如果是刚入行不久的话,你能够回答出以上三点呢,其实就已经很不错了啊,大部分的程序员对这个问题呢,可能只能回答出两点,第一点呢就是很多人都会知道啊,就是抽象类里面呢,他除了有抽象方法之外,还可以有实现的方法,也就是我们普通的这个成员函数对吧,就是可以有实现的方法,而接口不可以对吧接口里面的方法呢,必须全部是抽象的,然后抽象类呢,只能够单继承对不对,然后接口呢可以多实现,那么这两点呢,是大部分的程序都能够打上来的,而中间这一点呢,而中间这一点呢
    是很多人呢都会漏掉的啊,那么,如果你能把中间这一点能够打上来,说明你在平时写代码的时候呢,还是相当的细心的,那么这一点就是说呢,在我们的抽象内中啊他的成员变量呢,可以是各种类型的,就说你定义什么样,类型的,这个成员变量都没有都没有问题,但是在街口中的这个成员变量呢,他只能是这种常亮型,大家呢,可以在自己的 id 上呢去试一下,那么你在这个街口中去,写一个成员变量的话,你去写这三个修饰词 id 了,通常呢都会提示你这个,你写了也白写你你写不写都一样,那么默认他就有啊,所以说呢,其实街口中的这个成员变量,他默认就是一个常量,你写不写他都是一个常量啊,当然能够达出这一点呢,那么呢你在平时写代码的时候呢,还是相当细心的啊,但是呢对于我们啊,就是面这种中高级程序员来说啊,中高级的这种岗位,那么你只答出这三点呢,其实远远不够啊,其实我们如果面试这种岗位啊,比较就是相对来说不是这么呃,初级的话,那么呢你,在面对这种问题的时候,你就要小心了啊,面试官问这么简单的问题吗,他不会啊,如果说明知道你工作了三五年或者,对吧工作了三五年以上的程序,还来问你这种问题不应该啊,那么你在遇到这种问题的时候,那么你在遇到这种问题的时候

    你就要多留个心眼,就是说他,考察的不仅仅是这么表面上的东西啊,而是呢更深层次的东西,哪些东西呢我们来看一下,我们呢要从这个,就是设计的这个目的上面来分析啊,那么接口的设计目的,实际上呢,主要是对我们类的这个行为进行约束,也就是说我们这个类啊能够做什么,对吧能够做什么他能够提供哪些方法,也就是说他只约束了行为的有,就是说我这个类有没有这个方法啊,至于你这个方法到底是怎么实现的,他不管啊,就是说我们这个接口,他不管你这个到底是如何实现的,对这个实现,行为了他不进行任何的限制,但是我们的抽象类就不一样了,抽象类的设计目的他就不同跟接口啊,抽象类的设计目的呢是为了代码服用,也就是说了当不同的类啊,就是不同的类,它具有相同的行为,具有相同的行为的时候,也就是说存在一些共性的东西,那么这个时候呢,我们就可以把这些共性的东西了,抽象出来就是派生出一个抽象类啊,所以说我们在,抽象类这一块一定要记住是先有子类,再有妇类啊,一定是先存在子类,然后将子类的共性的,把它抽取成一个副类,这个时候才才存在这个负类啊,这个抽象类,那么在这个抽象类中呢,就是说他呢可以有,就是说他呢可以有

    呃抽象方法也可以有了实现了的方法,那么这些实现了的方法,相当于就是你子类了,就是掉的一定是负累的对不对,当然你子类也可以去扩展对吧就是啊,相当于我这里说的这个什么,非真子集对吧,然后呢对这个 a 减币的部分就是说,留给子类自己去扩展的部分,那么子类的,你爱怎么扩展就怎么扩展啊,所以呢,抽象类呢他是不允许实力化出来的,为什么不允许实力化出来了,因为他这里面有些方法是没有实现的,那么你如果去实力化了的话,我调这个方法我该执行啥呢,都不知道对不对,所以抽象类是不允许实力化的,而抽象类啊对类,本质他是对类本质的抽象,那么呢有一个很重要的一个,嗯一句话记住啊,他表达的是一只 a 的关系,也就是说这个子类是什么什么,a 比如说我们的 bfw 就是宝马,比如说宝马一只鹅咔也就是说,如果用这个宝马这个类继承,car 这个类,也就是说宝马是一台车,那么这是一种抽象的关系,抽象的关系啊,也就是说抽象类的包含,并且实现子类的通用特性啊,将子类存在的差异化特性的进行抽象,交由子类的去实现这个,个性化的东西,那么这个是抽象,而接口呢,他不是1之 a 的关系,但是 lucks 的关系,其实你记住这两个点,其实你记住这两个点

    你就能够明白这个,就是接口跟抽象,他这个设计上到底是出于什么目的啊,接口表达的是 nike a 的关系,他不是 ea,也就是说他是类似,并不是说直接就是啊,比如说我们这个,小鸟对吧,like ol correct 什么意思呢,就是说鸟,像一个飞行器,比如说我们有一个飞行器接口,飞行器接口呢,里面有一个飞的方法,哎我们小鸟也可以飞对不对,那么这个鸟就可以去去了,实现这个飞行器的这么一个方法,那么呢去实现这个飞的方法,但是我们的小鸟是一个飞行器吗,明显他不是对不对他不是啊,所以说接口的本质上是一知而不的,就是说不是不是啊,把它本质是 nike 而过的啊啊,不是不对啊,应该说这个 board 啊,它本质上是一则 bore 的,而不是说是一个飞行器啊,是 like 是 nike a 的关系啊,所以说接口的核心呢是定义行为啊,实线内可以做什么,至于实线内主体是谁,是如何实现的接口呢,不关心那么对于,那么其实你明白了这些呃,就是这个设计目的的话,其实呢这个实用场景就很简单了,比如说当你关注一个事物的本,质的时候,那么你就要使用错相类,而你只关注这个就是这个类啊,而你只关注这个就是这个类啊

    他你只关注超,只关注这个类的某一个方法,他有什么样的操作能够做什么的时候,那么这个时候呢我们就要用接口了啊,同时呢这个抽箱内的功能呢,他远远要超过接口,为什么因为抽箱内呢,可以有实现的方法,也可以有了位实现的方法,而接口不行对不对,当然呢接力8呃接地 k 8以后啊,他有一个默认的这个实线,但这个呢是后划了啊,但是呢,定义抽象类的这个代价呢比较高,说白了就是抽象类的,只能继承一个而接口呢,可以实现多个嘛,所以说你如果使用了抽象类的话,那么呢,也就说这个代价就比较高了啊,那么你这个,每个类啊,只能够继承一个,只能继承一个类对不对,那么在这个类中呢,你必须要继承或者编写出啊,你所有指类的这个指类啊,所有的共性,所以说呢这个是难度比较高的,啊所以说接口了,他能够在设计阶段呢,会能够能够帮助我们降低难度啊,抽象累了难度会更高一点,接口了会相对来说呢会同意一点啊,那么下面这些内容,那么才是我们一个中高级程序员,应该去回答的啊,针对这么一个,就是看似比较简单的问题啊,当然对于我们这种,初级程序员来说,或者说你刚入行不久的,你能回答出以上三点就已经呢,很不错了啊好,那么这个是接口跟抽象类的这个内容,那么这个是接口跟抽象类的这个内容