我被问到一个问题,我想在这里让我的答案复习。
问:在哪种情况下,扩展抽象类而不是实现接口更合适?
答:如果我们使用模板方法设计模式。
我对么 ?
很抱歉,如果我不能清楚地说明问题。
我知道抽象类和接口之间的基本区别。
1)在要求如此的情况下使用抽象类,即我们需要为特定操作(实现方法)在每个子类中实现相同的功能,而为某些其他操作(仅方法签名)实现不同的功能
2)如果需要使签名相同(且实现不同),请使用接口,以便可以遵循接口实现
3)我们可以扩展一个抽象类的最大值,但是可以实现多个接口
重申一个问题:除了上述提到的情况之外,还有其他具体需要使用抽象类的场景(可以看到模板方法设计模式仅在概念上基于此)吗?
接口与抽象类
在这两者之间进行选择确实取决于你要做什么,但幸运的是,对于我们来说,Erich Gamma可以为我们提供一些帮助。
一如既往地需要权衡取舍,接口为你提供了关于基类的自由,抽象类为你提供了以后添加新方法的自由。–埃里希·伽玛(Erich Gamma)
你必须先更改代码中的许多其他内容,然后才能去更改接口,因此避免这种情况的唯一方法是创建一个全新的接口,这可能并不总是一件好事。
Abstract classes应该主要用于紧密相关的对象。Interfaces
擅长为不相关的类提供通用功能。
重申一个问题:除了上面提到的这些情况之外,还有其他任何情况,我们特别需要使用抽象类(可以看到模板方法设计模式仅在概念上基于此)
是的,如果你使用JAXB。它不喜欢接口。你应该使用抽象类或通过泛型解决此限制。
接口:
通常,应该使用接口来定义合同(要实现什么,而不是如何实现)。
抽象类:
抽象类应用于(部分)实现。它们可能是限制API合同实施方式的一种手段。
我想读关于抽象的文章,但读到不同的文章,我感到很困惑。 下面是我无法理解的问题: 1)“抽象是通过使用抽象类和接口实现的吗?”我对此进行了搜索,得到了三种类型的答案: 与此处解释的不同。 它们是相同的,只是不同的观点,就像这里解释的。 最后一个是抽象类用来实现抽象。 哪一个是真的?请举一个简单的例子。 2)“抽象意味着隐藏不必要的细节。比如专注于一个对象做什么而不是它是如何完成的。” 这是正确的吗
当我宣布“抽象公共无效显示();”在抽象类测试中,这是创建一个全新的show()方法,还是只引用Inter接口中声明的show()方法?请澄清。
设计良好的软件系统应该具备“可复用性”和“可扩展性”,能够满足用户需求的不断变更。使用抽象类和接口是实现“可复用性”和“可扩展性”重要的设计手段。 13.1 抽象类 Java语言提供了两种类:一种是具体类;另一种是抽象子类。前面章节接触的类都是具体类。这一节介绍一下抽象类。 13.1.1 抽象类概念 在13.4.1节介绍多态时,使用过几何图形类示例,其中Figure(几何图形)类中有一个onDra
本文向大家介绍深入理解Java的接口与抽象类,包括了深入理解Java的接口与抽象类的使用技巧和注意事项,需要的朋友参考一下 对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然。今天我们就一起来学习一下Java中的接口和抽象类。下面是本
问题内容: 我接受了一次采访,面试官首先问我抽象类与所有抽象方法和接口之间的区别是什么。 我回答说,如果将来需要继承某些东西,并且已经扩展了一个类,那么您将无法做到这一点。 然后,他说,在这种情况下,您将永远不必扩展任何其他课程,而您必须执行合同。在这种情况下,最好使用抽象类或接口? 我告诉他您可以使用其中任何一个,但他并不满意。我不明白为什么-我认为这是开发人员/设计的选择。 问题答案: 表示接
接口描述了类的行为和功能,而不需要完成类的特定实现。 C++ 接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念。 如果类中至少有一个函数被声明为纯虚函数,则这个类就是抽象类。纯虚函数是通过在声明中使用 "= 0" 来指定的,如下所示:class Box { public: // 纯虚函数 virtual double getVolume() =