Java 如何强制实现接口的类同时扩展其他类?

Java 如何强制实现接口的类同时扩展其他类?,java,multithreading,interface,extends,Java,Multithreading,Interface,Extends,是否可以使实现我的接口的类自动扩展另一个类 更具体地说,我希望我的实现始终是线程的扩展。 或者说实现Runnable,但公共接口名实现someInterface似乎是错误的 public interface userValidTimer extends Thread { } 然而,这在netbeans中给了我一个错误。接口无法扩展类。你需要的是 public class MyClass extends MySuperClass implements MyInterface{ } 接口无法扩展

是否可以使实现我的接口的类自动扩展另一个类
更具体地说,我希望我的实现始终是线程的扩展。 或者说实现Runnable,但公共接口名实现someInterface似乎是错误的

public interface userValidTimer extends Thread {
}

然而,这在netbeans中给了我一个错误。

接口无法扩展类。你需要的是

public class MyClass extends MySuperClass implements MyInterface{ }

接口无法扩展类。你需要的是

public class MyClass extends MySuperClass implements MyInterface{ }

您不能强制实现接口的所有类扩展特定的类,因为这会破坏接口的用途

但是,如果将接口的方法放入扩展所选基类的抽象类中,则在没有接口的情况下也可以实现相同的效果。换言之,不是这个

interface MyInterface {
    void methodOne();
    void methodTwo();
}
这样做:

abstract class MyAbstractClass extends TheClassYouWantToExtend {
    public abstract void methodOne();
    public abstract void methodTwo();
}

您不能强制实现接口的所有类扩展特定的类,因为这会破坏接口的用途

但是,如果将接口的方法放入扩展所选基类的抽象类中,则在没有接口的情况下也可以实现相同的效果。换言之,不是这个

interface MyInterface {
    void methodOne();
    void methodTwo();
}
这样做:

abstract class MyAbstractClass extends TheClassYouWantToExtend {
    public abstract void methodOne();
    public abstract void methodTwo();
}
如何强制实现接口的类同时扩展其他类

你不能

但是,如果将接口转换为抽象类,它将起作用:

public abstract class UserValidTimer extends Thread {
    // add suitable constructors ...
    // add your interface methods here as abstract methods.
}

但还有一件事需要指出。一般来说,通过扩展
thread
类来实现线程是个坏主意。在大多数情况下,更好的选择是在
Runnable
中实现自定义线程逻辑,并将Runnable的实例作为构造函数参数传递给普通线程;e、 g.使用匿名
Runnable

    Thread t = new Thread(new Runnable(){
       public void run() { /* put your thread logic here */ }
    });
为什么??因为您可以很容易地修改它,以便可以将runnable交给线程池、执行器或fork-join池来执行

如何强制实现接口的类同时扩展其他类

你不能

但是,如果将接口转换为抽象类,它将起作用:

public abstract class UserValidTimer extends Thread {
    // add suitable constructors ...
    // add your interface methods here as abstract methods.
}

但还有一件事需要指出。一般来说,通过扩展
thread
类来实现线程是个坏主意。在大多数情况下,更好的选择是在
Runnable
中实现自定义线程逻辑,并将Runnable的实例作为构造函数参数传递给普通线程;e、 g.使用匿名
Runnable

    Thread t = new Thread(new Runnable(){
       public void run() { /* put your thread logic here */ }
    });

为什么??因为您可以很容易地修改它,这样就可以将runnable交给线程池、执行器或fork-join池来执行。

那么您可以使用“抽象类”来“代码到接口”?@DenUil是的,您可以。“编码到接口”中的“接口”一词并不意味着“Java接口”。它的意思是“一组相关的操作”。只要您使用
MyAbstractClass
作为运行时类型扩展为
MyAbstractClass
的对象的静态类型,您的代码就可以合法地描述为“接口编码”。因此,您可以使用“抽象类”来“接口编码”?@DenUil是的,您可以。“编码到接口”中的“接口”一词并不意味着“Java接口”。它的意思是“一组相关的操作”。只要您使用
MyAbstractClass
作为运行时类型扩展为
MyAbstractClass
的对象的静态类型,您的代码就可以合法地描述为“对接口进行编码”。接口只能扩展其他接口。接口不能扩展类。接口不实现其他接口。接口只能扩展其他接口。接口不能扩展类。接口不实现其他接口。最好不要扩展线程。分离逻辑和线程关注点。不扩展线程是一个很好的观点。分离逻辑和线程关注点。