Java 是可运行和线程抽象类吗?

Java 是可运行和线程抽象类吗?,java,class,oop,runnable,Java,Class,Oop,Runnable,这个问题可能很傻,我对Java和面向对象编程都很陌生。现在,我正在为我的学期考试学习,我有一个问题:是否可以运行和线程抽象类?抽象类是一个具有一个或多个抽象方法的类,或者只是使用abstract关键字任意标记为abstract的类。对于抽象类,您不能创建实例;您必须从类派生子类,实现任何抽象方法,然后创建子类的实例。更多 是一个接口,因此不是Java意义上的抽象类。然而: 在更一般的计算机科学/OOP意义上,您可以认为Java接口是一个抽象类,因为与抽象类一样,它定义了一个契约,但您不能直接实例

这个问题可能很傻,我对Java和面向对象编程都很陌生。现在,我正在为我的学期考试学习,我有一个问题:是否可以运行和线程抽象类?

抽象类是一个具有一个或多个抽象方法的类,或者只是使用abstract关键字任意标记为abstract的类。对于抽象类,您不能创建实例;您必须从类派生子类,实现任何抽象方法,然后创建子类的实例。更多

是一个接口,因此不是Java意义上的抽象类。然而:

在更一般的计算机科学/OOP意义上,您可以认为Java接口是一个抽象类,因为与抽象类一样,它定义了一个契约,但您不能直接实例化它,您必须实现它。它不是Java意义上的,但有一个一般情况的论点

在Java8中,尽管Runnable不能做到这一点,但现在可以使用方法的默认实现定义接口,这使得这些接口与Java的普通抽象类之间的区别非常微妙。剩下的区别与继承有关;在Java中,不能从多个类继承,但可以从一个类和任意数量的接口继承,即使是使用默认方法的接口。但是,Runnable没有默认方法

是一个未标记为抽象的类,没有抽象方法,因此可以直接实例化。因此,它也不是Java或一般CS意义上的抽象类。然而:

尽管不是一个抽象类,但它有点像一个抽象类,因为线程只有在您将其子类化并重写其运行方法时才最有用,或者如果您编写一个实现可运行实例的类并将其实例传递到线程构造函数中,这通常是首选方法。更多。
查一下,是我,不是我,是我,不是我。这次我已经帮你收拾好了。欢迎光临。这里的问题应该针对特定的编程问题。请采取一个有趣的观点。Thread是不是抽象类的抽象类。我可以看出这是如何造成混乱的,从这个角度来看,我认为没有理由否决这个问题。从CS理论的角度来看,Java接口是一个纯粹的抽象类。一般来说,我们不应该对线程进行子类化,如果你不对它进行子类化,那么它是最有用的。嘿,至少我们都在同一页上,这给这个答案增加了很多价值@我想保罗·格雷厄姆说得最好的是,有一段比a更强大的关系。线程构造函数的可运行参数是委托。也就是说,线程有一个Runnable。当您发现自己想要创建一系列子类时,您应该停下来问:我可以用接口和委托来实现吗?答案通常是肯定的,如果你使用委托,你的代码可能会更容易理解、测试和维护。@jameslarge:说得很好。当我第一次进入OOP时,我认为继承就是一切。我发现这些天我很少使用继承。