爪哇中抽象类和接口之间的区别
一些受欢迎的面试问题是“之间有什么区别 抽象类 和 接口“. “When will you use 抽象类
和 when will you use 接口
”。因此,在本文中,我们将讨论这个主题。
在探讨它们之间的差异之前,让我们先对其进行介绍。
抽象类
抽象类es
创建以捕获子类的共同特征。它不能被实例化,只能被其子类用作超类。抽象类用于为其层次结构中的子类创建模板。
让我们以JDK类为例 通用Servlet
1 2 3 4 5 6 7 8 9 10 |
上市 抽象 类 通用Servlet 实施 Servlet, ServletConfig,可序列化{ //抽象方法 抽象 虚空 服务(Servlet请求 要求, ServletResponse 资源) ; 虚空 在里面() { //它的实现 } //与Servlet相关的其他方法 } |
当HttpServlet扩展Generic servlet时,它提供service()方法的实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
上市 类 HttpServlet的 延伸 通用Servlet { 虚空 服务(Servlet请求 要求, ServletResponse 资源) { //实现 } 受保护的 虚空 做得到(HttpServlet的Request 要求, HttpServlet的Response 回应) { //实现 } 受保护的 虚空 doPost(HttpServlet的Request 要求, HttpServlet的Response 回应) { //实现 } //与HttpServlet相关的其他方法 } |
接口:
一个 接口 is a collection of 抽象 methods. A 类 实施 an 接口, thereby 在 heriting the 抽象 methods
of the 接口. So it is kind of signing a contract,you agree that if you implement this 接口, then you have to use its methods.It is just a pattern, it can not do anything itself.
让我们以 可外部化 接口。
1 2 3 4 5 6 7 8 9 10 11 12 |
上市 接口 可外部化 延伸 可序列化 { 虚空 writeExternal(对象输出 出) 抛出 IOException; 虚空 readExternal(对象输入 在 ) 抛出 IOException, ClassNotFoundException; } |
实现此接口时,必须实现以上两种方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
上市 类 雇员 实施 可外部化{ 整型 员工ID; 串 员工姓名; @覆写 上市 虚空 readExternal(对象输入 在 ) 抛出 IOException, ClassNotFoundException { 员工ID=在 .readInt(); 员工姓名=(串) 在 .readObject(); } @覆写 上市 虚空 writeExternal(对象输出 出) 抛出 IOException { 出.writeInt(员工ID); 出.writeObject(员工姓名); } } |
抽象类与接口
参数
|
抽象类
|
接口
|
---|---|---|
默认方法实现
|
它可以具有默认方法实现
|
接口是纯抽象的,它根本没有实现,但是在Java 8中,接口中可以有默认方法。
|
实作
|
子类使用 延伸 关键字以扩展抽象类,除非子类也是抽象类,否则它们需要提供抽象类中所有已声明方法的实现。 |
子类使用 实施 关键字以实现接口,并应为接口中声明的所有方法提供实现
|
抽象类可以有构造函数
|
接口不能有构造函数
|
|
与普通的Java类不同
|
抽象类与Java类几乎相同,除了您无法实例化它。
|
接口完全不同的类型
|
访问修饰符
|
抽象类方法可以具有public,protected,private和default修饰符
|
接口方法默认为public。您不能将其与其他访问修饰符一起使用
|
Main()方法
|
抽象类可以具有main方法,因此我们可以运行它
|
接口没有主要方法,因此我们无法运行它。
|
多重继承
|
抽象类可以扩展另一个类,并且可以实现一个或多个接口。
|
接口只能扩展到一个或多个接口
|
速度
|
比接口快 |
接口有点慢,因为在类中需要一些时间才能找到实现的方法
|
添加新方法
|
如果将新方法添加到抽象类,则可以提供它的默认实现。所以你不’无需更改您的当前代码
|
如果向接口添加新方法,则必须更改实现该接口的类
|
何时使用Abstract类和接口
- 如果您有很多方法,并且想要其中一些方法的默认实现,请选择 抽象类
- 如果要实现多重继承,则必须使用 接口由于Java不支持多重继承,因此子类不能扩展一个以上的类,但是您可以实现多个接口,因此可以为此使用接口。
- If your base contract keeps on changing then you should use an
抽象类
. Because if your base contract keeps on changing 和 you still use an接口
, you would have to change all the 类es which 实施 that 接口 every time the contract changes.
爪哇 8中默认和静态方法的介绍
Oracle尝试通过在接口中引入默认方法和静态方法的概念来弥合抽象类和接口之间的鸿沟。因此,现在我们可以在接口中提供方法的默认实现,而不会强制使用类来实现该方法。我将在下一篇文章中介绍这些主题。
请通过 爪哇核心面试题 了解更多面试问题。
发表评论