gpt4 book ai didi

java - 类型,类,接口(interface)的含义?

转载 作者:行者123 更新时间:2023-11-30 00:41:02 25 4
gpt4 key购买 nike

发现许多作者可以互换使用术语“类型”和“类”。某些涵盖基于对象的模型的教科书也涵盖了术语“接口(interface)”。

有人可以根据一般的面向对象程序设计,特别是基于C++ / Java / object-oriented-database的简单术语来解释它们。

最佳答案

类型是数据的分类,告诉您数据的允许值和允许的操作是什么。 (几乎?)所有编程语言都有类型,尽管从一种语言到另一种语言,键入规则有很大不同。

类是OOP语言中一种特定的类型类型,它是用语言本身的特定语法定义的(与诸如Java的intfloat之类的所谓“本机类型”相对,正确的语言)。通常根据内存布局和数据编码(所谓的成员变量)以及在其上起作用的函数(所谓的成员函数或方法)来定义类。

接口(interface)*是对类型必须执行的操作的说明,该操作应被视为给定的一组相似类型的一部分,但未指定允许的值,内存布局等。

这是一个非常非常非常简短的概述,是几种语言对这些方法的简化“平均形式”。它忽略了一些极端的情况和诸如C++的能力,使之成为接口(interface)和类之间的一部分。它还忽略了诸如Haskell之类的功能语言中的类,因为进一步伤害大脑并不是这里的目标。 ;)

编辑添加一些示例

这是一些类似于Java的声明,以帮助巩固这些概念。

int myVariable1;

该变量 myVariable1是一种本机(或原始)类型,由以2s补码表示法编码的32位带符号整数值组成。它具有已知范围(大约-20亿到+20亿)和可用的一组已知操作(乘法,加法,除法,模数,减法,各种转换等)。
class MyClass
{
int myMemberVariable;
int myOtherMemberVariable;
int myMethod(int p) { myMemberVariable += p; myOtherMemberVariable = p; }
}
MyClass myVariable2 = new MyClass();

此处 myVariable2是由 MyClass定义的类型。 MyClass定义了内存布局(在这种情况下,内存布局由两个2s补码表示法的32位有符号整数组成)以及单个操作 myMethod(),它将其参数添加到 myMemberVariable并将 myOtherMemberVariable设置为该参数。
interface MyInterface
{
int myInterfaceMethod(int p, int q);
}

此处 MyInterface仅声明一组操作(在此情况下为单个函数 myInterfaceMethod()组成),没有任何成员变量且没有任何实现。它仅告诉您,确保实现此接口(interface)的任何类都具有带有名称+返回值+参数的特定签名的方法。要使用它,您必须创建一个实现接口(interface)的类。
class MyOtherClass implements MyInterface
{
int myMember1;
int myMember2;
int myMember3;
int myInterfaceMethod(int p, int q) { myMember1 = p; myMember2 = q; myMember3 = p - q; }
int myNonInterfaceMethod() { return myMember1; }
}
MyOtherClass myVariable3 = new MyOtherClass();

现在, myVariable3被定义为具有由三个带符号的32位整数和两个操作组成的内存布局的类型。这些操作之一是 由于整个implements MyInterface部分而必须实现的操作。这样,任何期望(抽象) MyInterface类型的东西都可以使用(具体) MyOtherClass类型,因为可以保证操作在那里。另一种方法 myNonInterfaceMethod()- 而不是来自MyInterface,因此,只希望 MyInterface不能使用的东西,因为它不知道它的存在。

进一步进行了编辑,以根据请求添加一些实际的东西

如果您曾经在程序中使用过类型,则使用过整数,浮点值,字符串或类似的东西。类型可以说是计算的工作,我们所做的一切都是对给定类型的值进行操作。因此,我将专注于类和接口(interface)的特定于OOP的概念。

每当您拥有数据并对该数据进行操作时,您都有可能上课。以一个银行帐户为例。银行帐户将具有一个帐号,一个当前余额,一个交易限额等。代表这一类的类(很糟糕,仅用于解释概念)可能看起来像这样:
class BankAccount
{
String accountNumber;
float balance; /* DO NOT USE FLOATING POINT IN REAL FINANCIAL CODE! */
int transaction_limit;
float transaction(float change) {
balance += change > transaction_limit ? transaction_limit : change;
return balance;
}
}

现在,您可以创建此类型的变量,并知道它将携带一个帐号(本身就是 String类型),余额(本身就是 float类型),但是 请勿在真实世界中使用 float 点FINANCIAL CODE!)和交易限制(本身就是 int类型)。您还知道可以执行交易(通常称为 transaction),该交易将对照交易限额检查更改并修改余额。 (为此,一个真实的类会包含更多内容,并且会包含很多我出于教学目的已删除的混淆性保护内容。)

现在,假设您处于一个更加复杂的金融环境中,其中存在多种交易,而不仅仅是银行帐户。进一步说,您有一些代码可以处理 不在乎底层类型的细节是的事务。脱机的批量交易处理程序,例如,涵盖银行帐户,应收帐款帐户等。与其使之了解账簿中的每种交易,我们可以这样做:
interface Transactable
{
float transaction(float change);
}

class BankAccount implements Transactable
{
/* interior is identical */
}

class ReceivablesAccount implements Transactable
{
float balance;
float transaction(float change) { balance += change; }
}

现在,任何有关 Transactable类型的信息都可以使用 BankAccount的实例以及 ReceivablesAccount的实例。他们不必知道银行帐户有交易限制,而应收帐款帐户则没有。他们不必了解数据的内部表示形式。他们不必知道任何特殊情况。他们只需要按名称了解一个函数( transaction())就可以了。 (如果要对此进行更具体的实际使用,请查看收集类如何使用Java中的 Iterable接口(interface),更不用说“for in”循环了。)

关于java - 类型,类,接口(interface)的含义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4615416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com