让我们假设我们有一个抽象类,如下所示:
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();
}
谢谢您的投入!
你把它放在第一位,它变成了一个要求。如果不需要,不要强迫事情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的书中,我也不明白它的目的。我们何时,何地,为什么使用它? 请像您正在教初学者一样进行解释,非常感谢您的帮助。 问题答案: 抽象类是无法实例化的类。唯一的目的是扩展其他类。 抽象方法是抽象类中的方法(必须声明为抽象),