笔面试中被问到n次的问题——抽象类和接口
来源:互联网 发布:ibm 50量子计算机知乎 编辑:程序博客网 时间:2024/05/22 12:00
一、表格展示
接口
抽象类
多继承
支持
不支持
类型限制
没有
有,只能是引用类型
方法实现
继承类型中必须给出方法实现
继承类中可以不给出
扩展性
比较麻烦
相对比较灵活
多层继承
比较麻烦,需要借助虚函数
比较灵活
二、再来说说,接口相对于抽象类的优势。
好处一,接口不光可以作用于引用类型,也可以作用于值类型。而抽象类来说,只能作用于引用类型。
好处二,.Net的类型继承只能是单继承的,也就是说一个类型只能继承一个类型,而可以继承多个接口。其实,我对于这一点也比较赞同,多继承会使继承树变的混乱。
好处三,由于接口只是定义属性和方法,而与真正实现的类型没有太大的关系,因此接口可以被多个类型重用。相对于此,抽象类与继承类的关系更紧密些。
好处四,通过接口,可以减少类型暴露的属性和方法,从而便于保护类型对象。当一个实现接口的类型,可能包含其他方法或者属性,但是方法返回的时候,可以返回接口对象,这样调用端,只能通过接口提供的方法或者属性,访问对象的相关元素,这样可以有效保护对象的其他元素。
好处五,减少值类型的拆箱操作。对于Struct定义的值类型数据,当存放集合当中,每当取出来,都需要进行拆箱操作,这时采用Struct+Interface结合的方法,从而降低拆箱操作。
相对于抽象类来说,接口有这么多好处,但是接口有一个致命的弱点,就是接口所定义的方法和属性只能相对于继承它的类型(除非在继承类中修改接口定义的函数标示),那么对于多层继承关系的时候,光用接口就很难实现。因为如果让每个类型都去继承接口而进行实现的话,首先不说编写代码比较繁琐,有时候执行的结果还是错误,尤其当子类型对象隐式转换成基类对象进行访问的时候。
那么这时候,需要用接口结合虚方法来实现。其实在继承中,到底使用接口还是抽象类。接口是固定的,约定俗成的,因此在继承类中必须提供接口相应的方法和属性的实现。而对于抽象类来说,抽象类的定义方法的实现,贯穿整个继承树,因此其中方法的实现或者重写都是不确定的。因此相对而言,抽象类比接口更灵活一些。
三、抽象类与接口的区别
1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。
2.在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在interface中一般不定义数据成员),所有的成员方法都是abstract的。
3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。
e.g.狗是对于所有狗类动物的统称,京哈是狗,牧羊犬是狗,那么狗的一般特性,都会在京哈,牧羊犬中找到,那么狗相对于京哈和牧羊犬来说,就属于这类事物的抽象类型;而对于“叫”这个动作来说,狗可以叫,鸟也可以叫。很明显,前者相当于所说的是抽象类,而后者指的就是接口。
4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。
e.g.
public abstract class AbsTest{
public virtualvoid Test()
{
Debug.WriteLine("Test");
}
public abstractvoid NewTest();
}
public interface ITest
{
void Test();
void NewTest();
}
5.接口中定义的变量默认是publicstatic final 型,且必须给其初值,所才以实现类中不能重新定义,也不能改变其值。
6.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。
7.接口中的方法默认都是public,abstract 类型的。
- 笔面试中被问到n次的问题——抽象类和接口
- java面试总结——折磨人的接口和抽象类
- Java常见面试问题:抽象类与接口的区别
- 有关接口和抽象类的问题
- 接口和抽象类的一些问题
- java第八次课后笔记——抽象类、接口
- .Net面试基础问答:抽象类和接口的区别?
- java面试之接口和抽象类的区别
- 抽象类和接口的区别(面试必考题目)
- Java面试准备九:Java的接口和抽象类
- 抽象类和接口面试要点
- 抽象类和接口问题
- Java基础——Java的抽象机制,抽象方法抽象类和接口
- 记第四次和第五次面试——两次奇葩的面试
- 面试时必问题:接口和抽象类 有什么区别??
- 抽象类和接口的区别——学习笔记
- Java基础——抽象类和接口的关系
- 抽象类和接口作为返回值类型的问题
- [历年IT面试题]百度2014研发类校园招聘笔试题解答
- github上搭建静态博客
- 如何设置eclipse下查看java源码
- struts2 拦截器
- 欢迎使用CSDN-markdown编辑器
- 笔面试中被问到n次的问题——抽象类和接口
- VTK 面绘制 三维数据源
- Hbase分布式安装部署过程
- 高效程序员系列(扔掉旧代码)
- java设计模式--装饰器设计模式(javaIO设计使用)
- The Art of Picking Intel Registers
- 百度2014研发类校园招聘笔试题解答
- poj 1258 Agri-Net Prim + kruskal
- UVa 136 丑数