找到许多作者可互换地使用术语类型和类。涵盖基于对象模型的某些教科书也包括术语“接口”。
有人可以基于面向对象编程,特别是基于C ++ / Java /面向对象的数据库,以简单的术语解释这些。
答案 0 :(得分:3)
在O.O.P中,使用术语类型和类是很常见的,尤其是在谈论Java和/或C ++等语言时。
一般来说,当您定义一个类时,您实际上是在定义类型模板,您将从中创建您正在定义的类型的对象,并且/或实例化。
接口的概念有点复杂,当你定义一个接口时,你基本上指定了一种处理任何使用它的对象的特定方式。也就是说,您的对象必须来自实现该接口的类。接口是一种通过指定原始类/类型规范中未包含的其他行为来增强类/类型的方法。
出于许多实际目的,您可以将对象彻底地视为接口类型,这可能就是术语接口与术语类型可互换使用的原因。
请参阅Abstract Data Types背后的理论,以获得进一步的见解。
答案 1 :(得分:3)
答案 2 :(得分:1)
就个人而言,我认为如果你用具体的术语来描述它会更容易理解。例如,假设我们想要建立一个程序来跟踪厨房中的物品库存。
大多数语言只知道非常简单,原始的“类型”,如整数,字符和字节。我们可以完全使用这些原始类型来描述厨房中的事物类型。例如,您可以构造一个字符数组的数组,其中数组中的每个索引都表示某个属性。也许,索引0代表你想要描述的东西的“类型”。但是,当然,这种技术会很快变得非常复杂。
因此,使用面向对象技术,我们可以通过组合基元类型轻松定义新类型。您这样做的方法是创建一个类定义。将Class视为新Type的蓝图。
在厨房示例中,我们有“食物”类型,“装置”类型和“家具”类型的概念。为了在程序中使用这些新类型,我们需要为每个类型创建一个类定义:
public class Food {...}
public class Appliance {...}
public class Furniture {...}
界面描述了我们如何与某些东西进行互动。例如,我们想在厨房里创建一些东西。我们希望能够“添加”到我们的库存,“删除”我们的库存中的东西,并可能“迭代”我们的库存。 “添加”,“删除”和“迭代”操作几乎适用于任何事物列表(不仅仅是我们的库存)。为此,Java提供了一个名为"List"的接口。通过使用非常流行且通用的List“Interface”创建库存对象,我们可以免费获得所有操作,其他程序员可以查看我们的程序并确切知道如何与“Inventory”对象进行交互:
...
java.util.List inventory = new ArrayList();
...
//later in our program, we can interact with inventory
// with any of methods on the list interface (because ArrayList "implements" List)
inventory.add(new Furniture("chair"));
inventory.add(new Appliance("refrigerator"));
inventory.add(new Food("ice cream"));
...
因此,在上面的示例中,inventory是包含ArrayList类型实例的变量。由于ArrayList类定义实现了“List”接口,因此Type ArrayList的所有实例都必须遵守“List”接口中定义的协定。换句话说,我们可以像这样轻松地创建inventory
作为LinkedList(而不是ArrayList):
java.util.List inventory = new LinkedList();
请记住将接口视为合同,公开要执行的特定操作集。因为LinkedList和ArrayList都实现了“List”接口,所以它们在合同中都有义务实现“List”接口中的所有方法。
关于这一点的好处是,任何对使用我们的“库存”变量感兴趣的代码都没有给出关于如何“添加”,“删除”或“迭代器”的废话“行动已经实施。他们所关心的是变量“inventory”服从“List”界面。
换句话说,LinkedList实现了与ArrayList略有不同的“add”方法。但这对于任何想要使用我们的“库存”变量的代码都无关紧要。
如果某些数学专家想出了一种存储列表的革命性方法。也许他们想出如何在月球上而不是在计算机内存中存储列表,结果比ArrayList快10倍。那么我们需要做的就是:
java.util.List inventory = new CrazyMoonList();
使用库存的所有其他代码可以保持完全相同,因为CrazyMoonList保证提供“添加”,“删除”等。
希望这有助于澄清概念!
答案 3 :(得分:0)
类是对象的模板,是包含变量,属性和方法的用户定义的数据类型。
//defines a simple class describing all types of fruit
public class Fruit {
//insert fields here...
Fruit(){//constructor method
//insert constructor code here...
}
//insert class methods here....
}
当我们将这个类实例化为一个对象时,我们需要让编译器知道它将成为什么类型的对象。在这种情况下,我们的对象将是Fruit类型。
//The initialisation might look something like this.
Fruit myFruit = new Fruit();
前一行代码告诉编译器构造一个Fruit类型的新对象。
所以简单来说,“class”定义了一个对象特征(它的数据),其中“type”指的是我们在实例化时看到的对象类型,无论是Fruit,Car还是台!
通过进一步阅读继承和多态性主题,可以扩展这一概念。
我希望这有帮助。