我是一名 java 开发人员,他很好地理解了面向对象的概念(或者,我想像那样)。现在我正在学习设计模式(From Head first design patterns)。 我一直在阅读有关OOPS概念抽象的内容,以便简单地理解它,并且阅读更多有关它的信息让我比以前更加困惑。
据我所知,抽象是指隐藏程序的内部细节,同时将接口暴露给其他程序员,而不必担心内部细节。 但是,我不明白
请纠正我,如果我在任何地方都错了。
答案 0 :(得分:8)
“摘要”是“具体”的反义词。通过抽象,您可以表达概念和想法,而不是实现这些想法的具体方式。这符合您对抽象的理解 - 您隐藏了细节,而您只显示了界面。
但这也适用于抽象类 - 它们不具体(它们不能实例化),并且它们不指定实现。它们指定了子类必须处理的抽象概念。
所以它基本上是一个不同的观点 - 一个是从API的客户端的角度来看,另一个是关于子类的。 (请注意,在某些情况下,您可以使用抽象类而不是接口来实现相同的效果,尽管它不被视为良好实践)
答案 1 :(得分:0)
抽象类定义了类的用户将使用的接口。抽象类类似于接口,除了可以实现某些方法,并且所有抽象类都将由扩展它的具体类实现。 总而言之,优点是您可以拥有完全可互换的同一抽象类的多个实现,因为用户操作的类是抽象类型而不是特定实现类型。
使用工厂方法是抽象的常用方法,但您也可以使用其构造函数实例化具体类。重要的是必须定义为抽象类型的变量类型。这样做只能使用抽象类定义的接口访问对象变量。