接口与抽象类的异同之处
2017-10-05 17:31
357 查看
在技术面试中,经常会问一个问题,接口和抽象类区别和相似之处。这里总结一下,希望对读者有帮助。
先说它们的相似之处:
1.接口的方法全部没有实现部分,只有方法签名;而抽象类可以定义抽象方法,这些抽象方法也没有实现部分,只有方法签名。
2.接口和抽象类都不能直接用来建立对象实例,必须由一个普通类继承或实现它,实现那些抽象方法,然后以此普通类去创建对象实例。
再说一下它们的差异:
1.接口没有构造函数;但抽象类由构造函数。
2.接口不允许其内任何方法有实现部分;但抽象类允许定义非抽象方法,这类方法必须有实现部分。
3.接口没有内置的super和this变量;抽象类则有。
4.接口的成员变量一定是常数(final的变量);但抽象类的成员变量没有这个规定,与普通类的标准一致。
5.接口的所有成员的封装等级都是public,所以定义时不能加public之外的其它封装修饰符;但抽象类的成员可以是任何封装等级。
当然以上所说的内容,是基于传统的、JDK7.0之前的版本,JDK8.0对语法进行了较大调整,不在本文讨论之列。哎,技术进步太快了!是不是年纪大了,跟不上时代变化了!
先说它们的相似之处:
1.接口的方法全部没有实现部分,只有方法签名;而抽象类可以定义抽象方法,这些抽象方法也没有实现部分,只有方法签名。
2.接口和抽象类都不能直接用来建立对象实例,必须由一个普通类继承或实现它,实现那些抽象方法,然后以此普通类去创建对象实例。
再说一下它们的差异:
1.接口没有构造函数;但抽象类由构造函数。
2.接口不允许其内任何方法有实现部分;但抽象类允许定义非抽象方法,这类方法必须有实现部分。
3.接口没有内置的super和this变量;抽象类则有。
4.接口的成员变量一定是常数(final的变量);但抽象类的成员变量没有这个规定,与普通类的标准一致。
5.接口的所有成员的封装等级都是public,所以定义时不能加public之外的其它封装修饰符;但抽象类的成员可以是任何封装等级。
当然以上所说的内容,是基于传统的、JDK7.0之前的版本,JDK8.0对语法进行了较大调整,不在本文讨论之列。哎,技术进步太快了!是不是年纪大了,跟不上时代变化了!
相关文章推荐
- Java小白进阶之三---抽象类与接口的异同
- 从面向对象设计谈接口和抽象类的异同
- 接口和抽象类的异同
- interface,abstract class,abstract interface Java中的接口,抽象类和抽象接口的异同
- 抽象类(abstract class)和接口(interface)有什么异同?
- php抽象类和接口的异同【转】
- 接口和抽象类的异同点
- 抽象类和接口的异同
- 抽象类(abstract class)和接口(interface)有什么异同?
- [转]C#中抽象类和接口的异同
- java中接口与抽象类的异同
- 抽象类和接口异同点
- 从面向对象设计谈接口和抽象类的异同
- Java 接口和抽象类---不可不知的异同点
- 抽象类和接口异同
- interface学习以及 抽象类和接口的异同点
- 温故知新---抽象类和接口的异同
- 抽象类(abstract class)和接口(interface)有什么异同?
- JAVA8新特性下的接口和抽象类的异同