接口和抽象类

时间:2011-01-28 06:05:24

标签: java uml

接口和抽象类不正确吗? (至少标出两个答案)

一个。抽象类支持继承关系而不是实现关系。

湾接口支持实现关系,但不支持继承关系。

℃。 Abstract类和Interface都支持继承关系。

d。以上所有陈述都是正确的。

我对答案有点困惑,任何人都可以帮助我。我猜是a,b,d

2 个答案:

答案 0 :(得分:2)

你设定的问题是如此严厉,如果没有进一步的定义,它就没有任何合理的正确答案。正如其他人指出的那样,选项(d)带来了逻辑上的不一致。尽管如此,这个问题充其量只是含糊不清。

继承和实现是二元关系。因此,抽象类或接口是否支持它们没有单一的答案。相反,你必须要问:每个关系(继承,实现)中的每个分类器(抽象类,接口)可以扮演什么角色?为简单起见,我们在两种情况下都将角色称为“父”和“子”。在语义上不正确,但对我们的目的来说足够好。为避免疑问:

  • 继承:“parent”表示继承自的分类器,“child”表示继承分类器
  • For Realization:“parent”表示定义规范的分类器,“child”表示提供实现的分类器。

最后,我们需要定义“继承”和“实现”的含义。由于您已将其标记为java,因此我们可以假设“继承”表示“扩展”,“实现”表示“实现”。但是,这对于继承来说是一个非常值得怀疑的定义 - 通常意味着实现继承。与Java的“扩展”不同的语义。

行。所以现在我们可以定义一个真值表,每个分类器可以扮演哪些角色。

               |  Inheritance  |   Realisation  |
               |parent | child | parent | child |
---------------|-------|-------|--------|-------| 
Abstract Class |   T   |   T   |    F   |   T   |
Interface      |   T   |   T   |    T   |   F   |
-------------------------------------------------

由此,我们可以看到:

  1. Abstract Classes支持继承关系中的两个角色。
  2. 抽象类仅支持实现关系中的一个角色。
  3. 另请注意,如果“继承”表示“实现继承”而不是“扩展”,则表格会有所不同。

    现在让我们看一下你问题中的选项

      

    一个。抽象类支持   继承关系但不是   实现关系。

    如果没有定义“支持”的含义,我们不能说这是真还是假。抽象类同时支持继承角色,因此我们可以声明第一个子句为true。但是它们只支持一个Realization角色。这是否意味着他们支持或不支持它?除非“支持”被明确定义为“完全支持” - 两种角色 - 或“部分支持” - 至少一个角色,否则没有答案。

    列表中的选项(b)也存在类似的歧义。

    然而,选项(c)是可判定的。接口和抽象类都支持继承角色,因此(c)是正确的。注意,如果“继承”意味着“实现继承”而不是“扩展”,那么(c)是错误的。

    总之:如果没有正确定义问题,就无法回答。

    第h

答案 1 :(得分:1)

哦,回忆......这是java认证的程序员吗?

一个。真正
湾假
C。真正
d。 wtf是对的吗?对或错?我认为它......假。

你必须否定回答者...
有关abstract classesinterfaces

的详细信息,请查看此信息