【问题标题】:Abstraction and abstract in javajava中的抽象和抽象
【发布时间】:2011-07-23 12:36:51
【问题描述】:

我是一名 java 开发人员,对面向对象的概念有很好的理解(或者,我也这么认为)。现在我正在学习设计模式(从 Head first design patterns 开始)。 我一直在阅读有关 OOPS 概念抽象的文章以简要了解它,并且阅读更多有关它的内容让我比以前更加困惑。

据我了解,抽象是指隐藏程序的内部细节,同时将接口暴露给其他程序员,而不用担心内部细节。 但是,我不明白

  1. 抽象类如何适应这种抽象概念,抽象类要求我实现抽象方法,在 java 中使用抽象类的抽象在哪里。
  2. 我觉得,可以实现抽象的一种方式是通过私有构造函数并要求类的用户使用工厂方法来获取类的对象,您可以在其中实现并隐藏实现细节。

如果我在任何地方错了,请纠正我。

【问题讨论】:

  • 隐藏内部细节,称为封装。
  • 我猜,封装是指保持数据和将要在该数据上完成的操作绑定在一起,与高内聚和低耦合有关......
  • 封装有两种定义:en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) 在编程语言中,封装用于指代两个相关但不同的概念之一,有时用于它们的组合:一种语言机制,用于限制对某些对象组件的访问。一种语言结构,有助于将数据与操作该数据的方法(或其他函数)捆绑在一起。

标签: java abstract-class abstraction abstract


【解决方案1】:
  1. 抽象类定义了该类的用户将使用的接口。抽象类类似于接口,只是可以实现一些方法,并且所有抽象类都将由扩展它的具体类实现。 总之,优点是您可以拥有完全可互换的同一个抽象类的多个实现,因为用户操作的类是抽象类型而不是特定实现类型。

  2. 使用工厂方法是一种常用的抽象方法,但您也可以使用其构造函数实例化具体类。重要的是必须定义为抽象类型的变量类型。这样做只能通过抽象类定义的接口访问对象变量。

【讨论】:

    【解决方案2】:

    “抽象”是“具体”的反义词。抽象代表概念和想法,而不是实现这些想法的具体方式。这符合你对抽象的理解——你隐藏了细节,只显示了界面。

    但这也适用于抽象类——它们不是具体的(例如,它们不能被实例化),并且它们不指定实现。它们指定子类必须处理的抽象概念。

    所以基本上是不同的观点——一个是从API的客户端的角度,另一个也是关于子类的。 (请注意,在某些情况下,您可以使用抽象类而不是接口来达到相同的效果,尽管这不是好的做法)

    【讨论】:

    • 感谢您的回答。 “不同的观点”的观点让我不那么困惑......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 2020-10-20
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    相关资源
    最近更新 更多