星期五了,dmall最终还是没有招我。我很伤心。
还是好好看书,让他知道这是他的失误吧。可能因为我不是计算机专业的原因,也可能是面试回答的问题不够好。
面试中有一个这样的问题,说说抽象类和接口的区别。
其实我是知道的可是我没有说好,今天看到别人写的,我抄过来。
继承
下面将从众所周知的接口和抽象类的区别开始。这种差异是关于继承的,任何类都可以实现实现多个接口,但是只能扩展一个类,也只能有一个类。
多个扩展是一个语言特性,它存在于一些面对的语言。为什么呢?因为他带来的问题往往多于价值。
当一个类有许多父类时,有一个情况就是完全相同的方法会声明多个,因此必须显示地“告知”究竟需要的是哪一个。
这样的代码通常难以维护,因为对其进行的任何修改或者重构都必须小心地检查。另一个方面,如果一个类需要扩展至少两个拥有相同方法的类,那么DRY规则显然会被破坏,或者说会干扰到SAP。
“如果多个类的继承如此糟糕,为什么他可以实现多接口呢?”——如果这样的问题在你的脑海中盘旋,我不得不承认这是一个绝妙的问题。
然而,答案很简单。每个接口都是基于函数而不是一个类去实现。所以,即使实现十个不同的接口,每个包含相同的方法声明,内部也不会发生冲突。接口保证了方法的存在,而不是去说明方法的实现,这意味着,只要不违反SRP,你完全可以实现多个接口。
【我的理解很简单,就是从继承这个角度来看,如果多继承将会出现继承的方法名相同内容不同的情况,导致错误,而接口不会出现,因为接口只有方法名没有内容,内容是自己去实现的,则不会出现错误】
方法的可见度
接口中的所有方法都是public的,但对于抽象类的声明并没有这样的规则,当然不能是private。为什么不能private?因为一个抽象方法需要在子类中实现,但private无法访问子类,因此不抽象类不可能存在private属性。
接着回归问题。正如上文所写道的,接口是一个函数的保证,你可以把它当做使用接口类和实现这个接口之间的一个合约——保证一个特定类将实现所有声明的方法。这也是为什么这些方法必须是public的原因。因为被严格的限制到了实现上,所以其他一切都不成问题。
然而,当涉及到抽象类时并非这样。我们总是可以有不同的类组,除了这几方面基本上不同以外,其他地方几乎一样,类体的公共方法也是非常相似的。在这中情况下,可以创建protected方法来保持类之间的差异。
【我的理解就是,接口中的方法必须都是public修饰的,而抽象类中的方法除了public修饰还可以是protected修饰】
声明和定义
接口只能包含方法声明,而抽象类还可以包含方法的定义。
接口的重点在于提供特供特定函数,而抽象类还在于子类实现的相似性,不仅仅是其中的函数。
【我的理解,就是用途上的区别的官方说法】
常量
接口和抽象类中都可以定义常量。因为这些值不依赖特定对象,对他们来说都是相同的。
【常量是可以不用创建对象来实现的,直接用类名来调用】
属性
抽象类可以包含属性,但接口不能。原因与声明和定义是一样的。
【基本从五个方面去阐述了他们的不同,继承,方法的可见度,声明和定义,常量,属性】
哎,再说一遍,我被淘汰了,和我一起的一个我们学校的同学,是计算机专业的,我感觉他的水平和我差不多,为什么要他不要我,我会比他强的!!!
伤心中。
这几天也是因为听宣讲会呀,面试呀,笔试呀,搞得焦头烂额,也没怎么更新博客,和看书。
真的烦。
明天继续看书,继续更新博客。