代码之家  ›  专栏  ›  技术社区  ›  Naveed

PHP与Java中类与结构的区别

  •  0
  • Naveed  · 技术社区  · 15 年前

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

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

    有人说有很多不同之处。

    在阅读了许多文章和论坛之后,我有以下不同之处:

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

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

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

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

    建造师以不同的方式工作。

    _新_稊稊运营商的工作方式不同。

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

    你对我上面的名单有什么看法,或者你有不同的看法。谢谢

    4 回复  |  直到 10 年前
        1
  •  2
  •   Joey    15 年前

    这是非常具体的语言。您似乎混合了C++和C语言的公平份额,这两种语言都是非常不同的语言(尽管语法上有表面上的相似之处)。

    在C++中 struct S确实默认 public 成员可见性 class 默认为 private . 在C中 结构 用于声明值类型 通过值传递 ( note that the stack allocation is an implementation detail, not a contract )

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

    但这正是语言设计者认为应该使用它们的方式。人们善于滥用东西,所以不是每一个 结构 您看到的可能是一个简单、愚蠢的数据结构,而不是 你看,可能是一个有很多方法和其他方法的完整类。这仅仅是一个惯例,如果人们遵循它,其他人可以看到代码,看到“哦,很好,这是一个 结构 所以我不希望有太多的逻辑来解释更有趣的事情。理论上。

    埃塔: 因为您在评论中提到您特别对PHP或Java感兴趣:这两种语言都很有意思。 在语法或语言水平上有任何区别 结构 这就是为什么你的问题让我觉得有点奇怪。在Java和PHP中,你把事物建模为类,而不管它们是没有逻辑的数据结构还是实际存在的所有类。

        2
  •  1
  •   anon    15 年前

    这完全依赖于语言,所以不能有单一的正确答案。如果您对特定语言感兴趣,请在您的问题中详细说明。

        3
  •  1
  •   Mark Seemann    15 年前

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

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

    当涉及到OO设计时,我只是选择忽略这样一个结构的存在,因为它不给我额外的能力或特性。当我们深入研究实现时,类可能会更好地实现为一个结构,但它是一个纯粹的 实施详细信息 .

        4
  •  0
  •   Rohan Nalavade    11 年前

    结构和类别之间的差异

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

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