【问题标题】:Difference between Class and Structure in PHP and JavaPHP和Java中类和结构的区别
【发布时间】:2010-12-27 14:38:58
【问题描述】:

在处理面向对象编程时,类和结构之间的真正区别是什么。这个问题在我的 SE 面试中被问了很多次。

有人说只有一个区别: 结构成员默认是公共的,类成员默认是私有的。

有人说有很多不同。

看了很多文章和论坛,我有以下不同:

类默认拥有私有成员。结构默认拥有公共成员。

结构是值类型。 类是引用类型。

结构通过堆栈存储在内存中。 通过堆存储在内存中的类。

结构不支持继承。 类支持继承。

构造函数以不同的方式工作。

‘new’操作符以不同的方式工作。

为结构分配内存非常快,因为这发生在内联或堆栈上。

您对我上面的列表有何看法,或者您有不同的看法。谢谢

【问题讨论】:

  • 类和结构在不同的语言中有不同的含义。您需要告诉我们您所指的语言。
  • 我相信你的意思是在 C++ 中,但即使在那里你也有一些错误。
  • 我相信他的意思是C#,否则除了第一个以外的所有点都是错误的。
  • 如果取决于语言,我想了解 PHP/Java。我对这些语言的面试很感兴趣。
  • AFAIR,没有,因为 Java 和 PHP 都没有结构;)

标签: java php oop class structure


【解决方案1】:

这完全取决于语言,因此不可能有一个正确的答案。如果您对特定语言感兴趣,请在您的问题中说明。

【讨论】:

    【解决方案2】:

    从 OO 的角度来看,没有区别。它们都是具有公共 API 和方法(如果您的语言支持,还有属性)的类型。

    从技术角度来看,可能存在许多差异,但这取决于语言和/或平台。

    当谈到 OO 设计时,我只是选择忽略结构这样的东西根本存在,因为它没有给我额外的能力或特性。随着我们对实现的深入研究,一个类可能会更好地实现为结构,但它是一个纯粹的实现细节

    【讨论】:

      【解决方案3】:

      这是非常特定于语言的。您似乎混合了相当多的 C++ 和 C#,这两种语言都是非常不同的语言(尽管在语法上很相似)。

      在 C++ 中,structs 确实默认为 public 成员可见性,而 class 默认为 private。在 C# 中,struct 用于声明 按值传递的值类型 (note that the stack allocation is an implementation detail, not a contract)。

      一般来说,两种语言似乎对structclass 应该代表什么有相同的想法应该struct 用于简单的数据结构,它只用于保存数据,而类具有状态和操作它的方法。它们用于构建某种具体或抽象意义上的对象,而数据结构就是这样:结构化形式的数据;他们不需要对这些数据做太多事情,甚至不需要知道那是什么数据。本质上他们是愚蠢的,不在乎。

      但这正是语言设计者认为应该使用它们的方式。人们擅长误用事物,所以不是你看到的每个struct 都可能是一个简单、愚蠢的数据结构,也不是你看到的每个class 都可能是一个包含大量方法之类的成熟类。这只是一个约定,如果人们遵循它,其他人可以查看代码并看到“哦,很好,那是 struct,所以我不期望这里有太多逻辑,而是继续做更有趣的事情。”理论上它可能会起作用。

      ETA: 既然您在评论中提到您对 PHP 或 Java 特别感兴趣:这两种语言在 @ 的语法或语言级别上没有有任何区别987654333@ 或 struct 这就是为什么你的问题让我觉得有点奇怪。在 Java 和 PHP 中,您将事物建模为类,无论它们只是没有逻辑的数据结构还是包含所有内容的实际类。

      【讨论】:

      • 当我在采访中被任何人问及这种差异时,他们不依赖于任何语言。我认为这是一个常见问题。
      • NAVEED:关键是许多语言有不同的设施和能力。如果这个问题就像类和数据结构之间的区别一样笼统,那么实际上并不难回答。但是您在问题中列出的是关于 classstruct 关键字的 C++ 和 C# 功能的多彩拼凑,因此有点难以理解您的问题是关于什么确切。至于不同的语言,答案很大程度上取决于这些语言是什么。正如所指出的,例如,Java 仅具有适用于所有内容的类,无论数据结构与否。
      • 感谢您的回复。一开始,我的问题很笼统,我在问题中的观点也很笼统(这是我的观点,可能是错误的)。当用户询问特定语言时,我对 PHP 和 JAVA 表现出了兴趣。我的观点可能总体上是错误的,因此我在问题的最后询问了您的想法。这次讨论真的增加了我的知识。谢谢
      【解决方案4】:

      结构和类的区别

      -类和结构的主要区别在于结构的声明 以关键字 'struct' 开头,而另一方面,一个类以 关键字“类”。 - 在类中,数据成员和成员默认是私有的,而在结构中它们 默认是公开的。 - 类中支持数据隐藏,但结构中不支持。 - 结构只处理变量,而对象处理现实世界的对象。

      -如果我们显式指定每个成员的访问类型,那么结构将准确地表现 作为一个班级。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-16
        • 1970-01-01
        • 2011-12-07
        相关资源
        最近更新 更多