java - java中抽象类和接口(interface)的具体使用

标签 java interface abstract-class

<分区>

我已经看过很多关于抽象类和接口(interface)的例子,但我不知道这样做的用途,因为它们都在做同样的工作。谁能给我一个简单的例子来解开这个谜题

最佳答案

首先,修订基本差异:-

  1. 在 Java 接口(interface)中声明的变量默认是最终的。抽象类可以包含非最终变量。

  2. 默认情况下,Java 接口(interface)的成员是公共(public)的。 Java 抽象类可以具有类成员的常见风格,如私有(private)、 protected 等。

  3. Java 接口(interface)应该使用关键字“implements”来实现;应使用关键字“extends”扩展 Java 抽象类。

  4. 一个接口(interface)只能扩展另一个Java接口(interface),一个抽象类可以扩展另一个Java类并实现多个Java接口(interface)。

  5. 一个 Java 类可以实现多个接口(interface),但它只能扩展一个抽象类。 接口(interface)是绝对抽象的,不能实例化; Java 抽象类也不能实例化,但如果存在 main() 则可以调用。

  6. 与 java 抽象类相比,java 接口(interface)速度较慢,因为它需要额外的间接访问。

Consider using abstract classes if any of these statements apply to your situation:

您想在几个密切相关的类之间共享代码。 您希望扩展您的抽象类的类具有许多公共(public)方法或字段,或者需要 public 以外的访问修饰符(例如 protected 和 private)。

您想声明非静态或非最终字段。这使您能够定义可以访问和修改它们所属对象的状态的方法。

Consider using interfaces if any of these statements apply to your situation:

您希望不相关的类会实现您的接口(interface)。例如,Comparable 和 Cloneable 接口(interface)由许多不相关的类实现。

您想指定特定数据类型的行为,但不关心谁实现了它的行为。

您想利用类型的多重继承。

(摘自Oracle官方教程)

关于java - java中抽象类和接口(interface)的具体使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24445247/

相关文章:

java - 具有读写模式的 RandomAccessFile 过滤器在 Linux 环境下不起作用

C# 隐藏继承成员

C++、虚继承、奇怪的抽象类+克隆问题

c# - 为什么接口(interface)不能继承纯抽象类

java - 通过继承改进程序

java - 在 Java 中最大化 JInternalFrame

java - 使用 Java、AJAX 使用 Rest Web 服务将表单数据插入 MySQL 数据库

java - 无法读取 csv 文件

c# - 类代替接口(interface)失败

pointers - 如何在 golang 中获取指向通过 interface{} 传递的结构的指针?