【问题标题】:Some clarification with Java OOP theory?Java OOP理论的一些澄清?
【发布时间】:2014-11-08 08:47:28
【问题描述】:

所以总的来说,我对 OOP 和 Java 还是很陌生。我一直在阅读有关 OOP 编程的 4 个最基本概念的教科书,但这很令人困惑。

教科书将“一个类可以改变其功能或变量类型,而用户不需要改变他们的代码”作为封装的一个优势,但对我来说这听起来像是抽象......

此外,教科书将 Overriding 和 Overloading 列为继承形式,但 Google 说 Overriding 和 Overloading 是多态的形式。

谁能帮我解决这个问题?

【问题讨论】:

  • 我在 Wikipedia 上查找了多态性。它给出了略有不同的定义。我认为您可能不得不接受这些术语本身没有普遍认可的定义。计算机科学仍然是一门艺术。
  • Josh Bloch 给出了一个很好的例子,说明封装如何帮助用户修改 API 而不会破坏使用它的人的代码 (YouTube - How to write good API desgin and why it matters)。
  • 至于多态性和继承性,它们通常是齐头并进的。多态是通过单个接口与不同类型的对象进行通信的行为。如果Poodle 和Beagle 扩展Dog,那么Dog 可以用作这两种类型对象的接口,因为它们将从Dog 继承方法。覆盖允许您更改实现;当您使用界面进行交流时会发生什么。

标签: java oop theory


【解决方案1】:
  1. 您完全正确,抽象允许实现更改而不影响其用户。然而,封装是构建防弹抽象的一个关键特性:没有它,对象的用户只有在遵循从不访问对象内部状态的约定时才能保持独立于实现。

  2. 重载肯定,肯定,没有与继承有关。它是一种(弱)多态性,但最重要的是,允许为几个完全不同的方法使用相同的名称。它几乎与 OOP 无关,完全适用于任何其他编程范式,例如过程式或函数式。

【讨论】:

  • 维基百科称其为“重载”ad hoc polymorphism,并称它是多态的一种形式。我想我会选择“这些术语没有普遍认可的定义。”
  • 是的,多态性是一个相当松散的术语,它的内容高度依赖于上下文。
  • @MarkoTopolnik 非常感谢。也许是时候买一本更好的教科书了。
【解决方案2】:

"一个类可以改变它的功能或变量类型和用户 不需要更改他们的代码”作为封装的优势, 但对我来说这听起来像抽象 ...

这意味着只要您保持相同的类定义和公共接口,您就可以更改您的类的实现,而不会强迫您的类的用户调整他们的代码。因此,他们不必处理您班级中所做的内部更改。您的类的公共接口包括您的类公开的所有方法和成员。

【讨论】:

    【解决方案3】:
    猜你喜欢
    • 2011-10-24
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 2014-07-14
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    相关资源
    最近更新 更多