【问题标题】:Abstract class hierarchy in JavaJava中的抽象类层次结构
【发布时间】:2018-05-07 19:12:15
【问题描述】:

不知道为什么我需要这样做,但在 Java 中是否有可能拥有一个带有具体子类的抽象父类,该子类具有自己的抽象子类?假设抽象最终会在它下面有具体的类。

【问题讨论】:

  • 是的。这是可能的。
  • 我想你指的是多级继承
  • 我的理解是 Java 不允许这样做。对吗?
  • @JamesTatum 不,不正确。 Java 确实允许这样做。
  • 这不是因为你可以做某事,你就应该这样做。尤其是在那种精确的情况下。

标签: java inheritance abstract-class


【解决方案1】:

是的,您可以同时让具体类扩展抽象类,反之亦然 - 抽象类扩展具体类。

public abstract class A {

}

public class B extends A {

}

public abstract class C extends B {

}

【讨论】:

  • @JamesTatum 如果你觉得我的回答对你有帮助,你可以accept my answer。
  • 不,那是非常糟糕的做法......它没有任何意义。寻找 UML 图,你会发现即使你能做到,但你真的不应该这样做,特别是如果你希望你的结构真正有意义(即帮助其他与你一起工作的人理解你所做的事情)。
  • @Lutzi 首先,问题是这在 Java 中是否可行,而不是它是否是一个好习惯。 UML 图根本不是争论,因为它们只是传达模型。
  • 是的,这些模型应该总是有意义的!你怎么能证明一个具体概念的专业化是抽象的?根据定义,具体概念的专业化是具体的。
  • @Lutzi 如果您说抽象类扩展具体类是一种不好的做法,让我提醒您,在大多数情况下,抽象类扩展了具体类。
【解决方案2】:

不,这是一个非常糟糕的做法。如果 Java 允许的事件,从 UML 图的角度来看,它没有任何意义。

一个类是abstract,如果它没有实现所有预期的行为。然后在具体的子类中,它是具体的,因为它实现了所有需要的行为。然后,拥有abstract 子类没有任何意义。它是具体类的特化,意味着它具有该对象所需的所有协议。

换句话说,具体概念的专业化不能是抽象的。

【讨论】:

  • 在 Java 中,大多数抽象类都扩展了具体类。每个抽象类在层次结构中至少有一个具体的超类。这在某种程度上使“不良做法”论点无效。
  • 您说的是本地类或包中的类的专业化。我说的是 UML 图,关于代表我们世界的模型。是的,我知道Object 不是一个抽象类,但这并不意味着你应该把它当作一个论点。如果他/她想用他/她自己的方式建模,可以,但是UML和Java已经约定了阻止构建没有任何意义的模型,并且将来无法扩展。
  • 但是 UML 和 Java 有约定 - 你刚刚发明了这个约定。什么是原生类? 包中的类 - 所有类都来自包。
  • @lexicore 每个抽象类在层次结构中至少有一个具体的超类。* - 你真的想称它为 every 吗?是否所有抽象类都有一个 concrete 超类(尽管许多抽象类扩展了其他抽象类 - 就像在 Collections 库中一样)
  • @lexicore 除非你的意思是 Object(隐式)
猜你喜欢
  • 1970-01-01
  • 2017-04-03
  • 1970-01-01
  • 1970-01-01
  • 2014-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-21
相关资源
最近更新 更多