当前位置: 首页 > 面试题库 >

ava中的抽象类与接口

东方骏
2023-03-14
问题内容

我被问到一个问题,我想在这里让我的答案复习。

问:在哪种情况下,扩展抽象类而不是实现接口更合适?

答:如果我们使用模板方法设计模式。

我对么 ?

很抱歉,如果我不能清楚地说明问题。
我知道抽象类和接口之间的基本区别。

1)在要求如此的情况下使用抽象类,即我们需要为特定操作(实现方法)在每个子类中实现相同的功能,而为某些其他操作(仅方法签名)实现不同的功能

2)如果需要使签名相同(且实现不同),请使用接口,以便可以遵循接口实现

3)我们可以扩展一个抽象类的最大值,但是可以实现多个接口

重申一个问题:除了上述提到的情况之外,还有其他具体需要使用抽象类的场景(可以看到模板方法设计模式仅在概念上基于此)吗?

接口与抽象类

在这两者之间进行选择确实取决于你要做什么,但幸运的是,对于我们来说,Erich Gamma可以为我们提供一些帮助。

一如既往地需要权衡取舍,接口为你提供了关于基类的自由,抽象类为你提供了以后添加新方法的自由。–埃里希·伽玛(Erich Gamma)

你必须先更改代码中的许多其他内容,然后才能去更改接口,因此避免这种情况的唯一方法是创建一个全新的接口,这可能并不总是一件好事。

Abstract classes应该主要用于紧密相关的对象。Interfaces擅长为不相关的类提供通用功能


问题答案:

重申一个问题:除了上面提到的这些情况之外,还有其他任何情况,我们特别需要使用抽象类(可以看到模板方法设计模式仅在概念上基于此)

是的,如果你使用JAXB。它不喜欢接口。你应该使用抽象类或通过泛型解决此限制。

接口:

  1. 一个类可以实现多个接口
  2. 接口根本无法提供任何代码
  3. 接口只能定义公共静态最终常量
  4. 接口无法定义实例变量
  5. 添加新方法会对实现类产生连锁反应(设计维护)
  6. JAXB无法处理接口
  7. 接口不能扩展或实现抽象类
  8. 所有接口方法都是公开的

通常,应该使用接口来定义合同(要实现什么,而不是如何实现)。

抽象类:

  1. 一个类最多可以扩展一个抽象类
  2. 抽象类可以包含代码
  3. 抽象类可以定义静态常量和实例常量(最终)
  4. 抽象类可以定义实例变量
  5. 修改现有抽象类代码会对扩展类产生连锁反应(实现维护)
  6. 向抽象类添加新方法不会对扩展类产生连锁反应
  7. 抽象类可以实现接口
  8. 抽象类可以实现私有和受保护的方法

抽象类应用于(部分)实现。它们可能是限制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() =