我是 Java 新手。抽象数据类型和接口(interface)之间有什么区别。
例如我们有一个ListADT
interface MyListADT<T> {
void add(T var);
void add(T var,int pos);
void display();
T remove(int pos);
void clear();
boolean contains(Object o);
}
我们将 ADT 定义为接口(interface)的地方。 NoW ADT 和 Interface 或 ADT is an Interface 有什么区别
最佳答案
这个问答似乎有点困惑。问题是关于“抽象数据类型和接口(interface)”的,大多数答案都集中在“抽象类”上。
术语“抽象数据类型”和抽象类指的是两个完全不同的概念,尽管它们都使用“抽象”一词。抽象数据类型是一种自包含的、用户定义的类型,它将数据与一组相关操作捆绑在一起。它的行为方式与内置类型相同。但是,它不继承自其他类,也不作为其他派生类的基础。如果您在 wiki 中搜索它,您会看到“抽象数据类型被定义为构成数据类型的数据对象的数学模型以及对这些对象进行操作的函数。没有定义它们的标准约定. 可以在“命令式”和“功能性”定义风格之间进行广泛划分。例如,在 Java 中我们有 List 接口(interface)。它定义了一个数据结构和一组操作方法,但不会提供任何实现。
相比之下,抽象类绝不是抽象数据类型。抽象类是声明为抽象的类——“它可能包含也可能不包含抽象方法”。抽象类不能被实例化,但可以被子类化。它不是一种数据类型。抽象类只是一个骨架接口(interface),它指定了其子类实现的一组服务。不幸的是,这两个概念之间的区别经常被混淆。许多人在实际提到抽象类时错误地使用术语抽象数据类型。
在我看来,接口(interface)是 Java 实现“抽象数据类型”的方式
您可以在 Wiki 中阅读“Abstract Data Type”。除此之外,如果您想了解更多关于 Java 中的抽象数据类型的信息,您可以引用此链接,http://www.e-reading.ws/bookreader.php/138175/Abstract_Data_Types_in_Java.pdf , 真的很棒。
你们中的大多数人可能都熟悉抽象类,但您仍然可以从 http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html 中了解它。
为了增加这种混淆,Java 8 引入了一种叫做“Default Methods”的东西,通过它我们实际上可以为接口(interface)中的方法提供实现。为了消除这种混淆,您可以引用这个 stackoverflow 问题 Interface with default methods vs Abstract class in Java 8
关于java - 抽象数据类型和接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19239471/