当前位置: 首页 > 知识库问答 >
问题:

接口中的字段

萧业
2023-03-14

在Java中我有一个基本的问题,但在OOP中它是一个一般的问题。为什么接口允许设置字段?这难道不是与接口应该做的相反吗?

按照我的理解,interface在英语中是一个形容词。因此,如果我的类实现了Runnable和Serializable接口,我就向用户保证我的类将满足Runnable和Serializable的条件。然而,这将意味着接口是“无状态”的,但它们被允许在Java中有字段...

我是不是漏掉了什么?

共有2个答案

叶经略
2023-03-14

首先,在Java,OOP范式和OOP实现是有区别的,所以相同的词可能意味着一些不同的东西。

在OOP中,范式接口是您可以对对象做的事情(或者对象可以为您做的事情)。任何对象都可以有几个接口,从而扮演不同的角色。例如,某人可能是一名程序员,能够创建程序,但同时他可能是一名丈夫和父亲,因此能够支付家庭账单和照顾孩子。在这里“程序员”、“丈夫”和“父亲”是接口,一个人是实现它们的对象。请注意,接口并不意味着存在任何用于实现对象的特定特性(字段),而只是该对象应该能够执行的操作。

Java或多或少地遵循了这一思想,但与任何范例一样,实现都有其自身的特点。Java允许描述方法,即实现对象应该能够执行的操作,但不允许描述任何实现细节,因此,不涉及对象字段或私有方法。

但是常数(public final static字段)呢?它们是实现的一部分还是接口的一部分。两者都有可能。例如。接口“programmer”可以将常量work_hours设置为“8”。因此,Java也允许您在接口中描述常量。

请注意,Java只是帮助您做出好的OOP设计,但它并不强烈要求它。特别是,不是对象的所有公共方法都应该存在于接口中。例如,getter和setter方法通常是公共的,但实际上它们是实现的一部分,而不是接口,因此不将它们引入接口是值得的。

(还请注意,我在这里描述大部分内容都是关于主流的OOP,就像在Java一样,但也有其他类型的OOP,比如基于原型的OOP,特别是用JavaScript实现的OOP)。

赵炯
2023-03-14

接口中的所有字段都是public static final,即它们是常量。

通常建议避免此类接口,但有时您会发现一个接口没有方法,仅用于包含常量值列表。

 类似资料:
  • 问题内容: 我在Java中有一个基本问题,但这是OOP中的一个普遍问题。为什么界面允许设置字段?这是否与接口应该做的工作背道而驰? 按照我的理解,接口就是英语中的形容词。因此,如果我的课程实现了Runnable和Serializable接口,那么我向用户保证我的课程将满足Runnable和Seriablizable的条件。但是,这意味着接口是“无状态的”,但是允许它们在Java中具有字段… 我想念

  • 我需要在我的应用程序中创建100个或更多的静态最终常数,我可以通过以下两种方式实现这一点: 创建一个简单的java并在该类中创建字段 创建接口时应将所有变量放入其中,因为接口中的所有字段都是隐式的 在上述方法中,我有以下问题: 哪种方法是实现这一目标的正确方法

  • 问题内容: 我正在获取一个json响应并将其存储在mongodb中,但是我不需要的字段也正在进入数据库中,是否仍要剥离unseccary字段? 输出: 问题答案: 您可以使用从给定对象中选取某些属性的函数: 然后:

  • 以下是我的DTO: bookdto.java: BookSpecificationsDTO接口: 书目规格界面: BookSpecificationStype: ClassicBookSpecification: 所以,我的问题是我能以某种方式得到这份工作吗?在这种情况下,如果其中一个字段是接口,是否可以将bookdto.java映射到book.java?提前感谢!

  • 问题内容: 我有一个定义方法的接口。我有一个 实现 此接口的结构。在其中,我已经从该接口实现了方法,并且还定义了其他方法。 例如: 在操场上:https : //play.golang.org/p/B1GgoNToNl_l 在此,WagTail()不是Animal接口的一部分,但属于Dog结构。运行此代码会出现错误 dog.WagTail未定义(动物类型没有字段或方法WagTail)。 有没有一种

  • 为什么它这样做,它有一个更好的做法?在sub接口中实现方法有什么区别吗?