Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的抽象与抽象_Java_Abstract Class_Abstraction_Abstract - Fatal编程技术网

java中的抽象与抽象

java中的抽象与抽象,java,abstract-class,abstraction,abstract,Java,Abstract Class,Abstraction,Abstract,我是一名java开发人员,对面向对象的概念有很好的理解(或者,我也这么认为)。现在我正在学习设计模式(从Head-first设计模式)。 我一直在阅读有关OOPS概念抽象的文章,以便简单地理解它,而阅读更多关于它的内容使我比以前更困惑 据我所知,抽象是指隐藏程序的内部细节,同时向其他程序员公开接口,而不必担心内部细节。 但是,我不明白 抽象类如何适应这个抽象概念,抽象类要求我实现抽象方法,在java中使用抽象类是抽象 我觉得,实现抽象的一种方法是通过私有构造函数,并要求类的用户使用工厂方法来获取

我是一名java开发人员,对面向对象的概念有很好的理解(或者,我也这么认为)。现在我正在学习设计模式(从Head-first设计模式)。 我一直在阅读有关OOPS概念抽象的文章,以便简单地理解它,而阅读更多关于它的内容使我比以前更困惑

据我所知,抽象是指隐藏程序的内部细节,同时向其他程序员公开接口,而不必担心内部细节。 但是,我不明白

  • 抽象类如何适应这个抽象概念,抽象类要求我实现抽象方法,在java中使用抽象类是抽象
  • 我觉得,实现抽象的一种方法是通过私有构造函数,并要求类的用户使用工厂方法来获取类的对象,您可以在其中实现并隐藏实现细节
  • 如果我有什么地方错了,请纠正我。

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

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

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

  • 抽象类定义了类的用户将使用的接口。抽象类类似于接口,不同之处在于可以实现某些方法,并且所有抽象类都将由扩展它的具体类实现。 总之,优点是您可以拥有同一抽象类的多个实现,这些实现是完全可互换的,因为用户操作的类是抽象类型而不是特定的实现类型

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


  • 谢谢你的回答。“不同观点”的观点让我不那么困惑……隐藏内部细节,这称为封装。我想,封装是指将数据和将要在该数据上执行的操作绑定在一起,与高内聚性和低耦合相关……封装有两种定义:en.wikipedia.org/wiki/enclosuration\在编程语言中,封装是指两个相关但不同的概念之一,有时还涉及到它们的组合:一种语言机制,用于限制对对象某些组件的访问。一种便于将数据与操作该数据的方法(或其他函数)捆绑在一起的语言结构。