您如何强制实现接口的 class 也扩展另一个 class?
How can you force a class that implements a interface also extend an other class?
是否可以让实现我的接口的 class 自动扩展另一个 class?
更具体地说,我希望我的实现始终是 Thread 的扩展。
或者就此而言实现 Runnable,但是 public interface Name implements someInterface 似乎错了......
public interface userValidTimer extends Thread {
}
但是这让我在 netbeans 中出错。
接口无法扩展 class。你需要的是
public class MyClass extends MySuperClass implements MyInterface{ }
您不能强制所有实现接口的 class 扩展特定的 class,因为那样会破坏接口的目的。
但是,如果您将接口的方法放入抽象 class 中以扩展您选择的基础 class,则无需接口也能达到相同的效果。换句话说,而不是这个
interface MyInterface {
void methodOne();
void methodTwo();
}
这样做:
abstract class MyAbstractClass extends TheClassYouWantToExtend {
public abstract void methodOne();
public abstract void methodTwo();
}
How can you force a class that implements a interface also extend an other class?
你不能。
但是,如果你把接口变成抽象的class,它会起作用:
public abstract class UserValidTimer extends Thread {
// add suitable constructors ...
// add your interface methods here as abstract methods.
}
但是还有一点要指出。一般来说,通过扩展 Thread
class 来实现线程是一个坏主意。在大多数情况下,更好的选择是在 Runnable
中实现自定义线程逻辑,并将 runnable 的实例作为构造函数参数传递给 vanilla Thread;例如使用匿名 Runnable
class.
Thread t = new Thread(new Runnable(){
public void run() { /* put your thread logic here */ }
});
为什么?因为你可以很容易地修改这个,这样runnable就可以交给一个线程池,一个执行器或者一个fork-join池来执行。
是否可以让实现我的接口的 class 自动扩展另一个 class?
更具体地说,我希望我的实现始终是 Thread 的扩展。
或者就此而言实现 Runnable,但是 public interface Name implements someInterface 似乎错了......
public interface userValidTimer extends Thread {
}
但是这让我在 netbeans 中出错。
接口无法扩展 class。你需要的是
public class MyClass extends MySuperClass implements MyInterface{ }
您不能强制所有实现接口的 class 扩展特定的 class,因为那样会破坏接口的目的。
但是,如果您将接口的方法放入抽象 class 中以扩展您选择的基础 class,则无需接口也能达到相同的效果。换句话说,而不是这个
interface MyInterface {
void methodOne();
void methodTwo();
}
这样做:
abstract class MyAbstractClass extends TheClassYouWantToExtend {
public abstract void methodOne();
public abstract void methodTwo();
}
How can you force a class that implements a interface also extend an other class?
你不能。
但是,如果你把接口变成抽象的class,它会起作用:
public abstract class UserValidTimer extends Thread {
// add suitable constructors ...
// add your interface methods here as abstract methods.
}
但是还有一点要指出。一般来说,通过扩展 Thread
class 来实现线程是一个坏主意。在大多数情况下,更好的选择是在 Runnable
中实现自定义线程逻辑,并将 runnable 的实例作为构造函数参数传递给 vanilla Thread;例如使用匿名 Runnable
class.
Thread t = new Thread(new Runnable(){
public void run() { /* put your thread logic here */ }
});
为什么?因为你可以很容易地修改这个,这样runnable就可以交给一个线程池,一个执行器或者一个fork-join池来执行。