当前位置: 首页 > 知识库问答 >
问题:

插入“Implements XYZ”的最佳位置是什么?抽象类与扩展类

柯升
2023-03-14

让我们假设我们有一个抽象类,如下所示:

public abstract class Foo {
  public Foo (boolean bar) {...}
}

我们还有一个扩展foo的类:

public class FooThread extends Foo {}
public abstract class Foo implements Runnable {}
  • 看抽象类时容易理解
  • 扩展性较低

2)将实现插入扩展类:

public class FooThread extends Foo implements Runnable {}
  • 抽象类中没有线程功能的提示
  • 更可扩展
public class FooThread extends Foo implements Runnable {}

public abstract class Foo {
  public Foo (boolean bar) {...}
  public abstract void run();
}
    null

谢谢您的投入!

共有1个答案

濮阳浩穰
2023-03-14

你把它放在第一位,它变成了一个要求。如果不需要,不要强迫事情runnable。如果它们需要runnable,那么添加接口。

因此,在本例中,我将支持您的选项(2):将实现可运行放在foothread类上,而不是放在foo抽象类上,除非foo的所有子类都必须作为线程运行(但它的名称并不表明情况是这样)。

类似地,您不需要按照选项(3),添加public abstract void run(),除非所有foo实现都必须具有该方法;如果是这种情况,您可以按照选项(1)简单地实现runnable

我同意Torben的观点,foothread最好命名为footask。不仅仅是因为可运行的不是线程(线程是可运行的,反之亦然),还因为“任务”这个词更多地是面向业务领域的(更高级别的抽象)。

 类似资料:
  • 大约两个月前,我刚刚开始使用java,我正在尝试更多地理解抽象类。我理解抽象及其实现的基本思想,但我不明白为什么一个抽象类会扩展另一个抽象类,以及它添加了哪些功能。还有,我看到一个抽象类扩展了另一个抽象类,但它只实现了另一个抽象类的一个功能。 我确实查了一些示例代码,但它们只显示了实现,没有给出任何解释: 如您所见,抽象类并没有实现抽象类中的所有功能。它只实现函数。但是如果是具体的,那么就需要实现

  • 本文向大家介绍Django项目中python类的最佳位置是什么?,包括了Django项目中python类的最佳位置是什么?的使用技巧和注意事项,需要的朋友参考一下 您可以将上述课程放在想要的地方。 示例 然后,您可以使用import导入qux.py模块。 从project.foo.qux导入* 处理大量文件时,使目录更好。例如-

  • 本文向大家介绍C#扩展抽象基类,包括了C#扩展抽象基类的使用技巧和注意事项,需要的朋友参考一下 示例 与接口(可以描述为实现合同)不同,抽象类充当扩展的合同。 抽象类无法实例化,必须对其进行扩展,然后可以实例化生成的类(或派生类)。 抽象类用于提供通用实现 上面的示例显示了实现Car的任何扩展类如何自动接收HonkHorn方法。这意味着任何开发新汽车的开发人员都无需担心它将如何鸣笛。

  • 我在阅读片段文档时发现了以下内容: 注意:如果在片段中需要上下文对象,可以调用getContext()。但是,要注意的是,只有当片段附加到活动时才调用getContext()。当片段尚未附加或在其生命周期结束时分离时,getContext()返回null 所以我的问题是在片段中调用getContext()的最佳位置是什么。就像我可以在onCreateView中调用它一样,或者在任何其他地方调用on

  • 问题内容: 我之前了解到抽象类可以扩展具体类。尽管我没从JAVA设计师那里看到原因,但是没关系。我还了解到,扩展具体类的抽象类可以使重写的方法抽象。为什么?您可以提供有用的用例吗?我正在尝试学习设计模式,我不想错过任何东西。 这是示例: 问题答案: 如果我有一组想要默认实现的类(以便它们可以从扩展),并且想要强制提供自己的实现(在这种情况下使其抽象为子类会强制执行此操作。) 当然,此示例中的另一种

  • 问题内容: 我得到了几种解释,但是到目前为止,我还无法理解Java中的抽象类和方法是什么。 有人说它必须与程序的安全性做些关系,另一些人说不是那样。 即使从Dietel&Dietel的书中,我也不明白它的目的。我们何时,何地,为什么使用它? 请像您正在教初学者一样进行解释,非常感谢您的帮助。 问题答案: 抽象类是无法实例化的类。唯一的目的是扩展其他类。 抽象方法是抽象类中的方法(必须声明为抽象),