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
的对象的静态类型,您的代码就可以合法地描述为“对接口进行编码”。接口只能扩展其他接口。接口不能扩展类。接口不实现其他接口。接口只能扩展其他接口。接口不能扩展类。接口不实现其他接口。最好不要扩展线程。分离逻辑和线程关注点。不扩展线程是一个很好的观点。分离逻辑和线程关注点。