[英]How to substitute an abstract class with an interface in Java?
我有一个抽象类Work
有两个抽象方法( init
和work
)和一个具体的方法( run
)与抽象方法的工作。
class work
{
abstract static class Work<T> implements Runnable
{
T data;
abstract protected void init ();
abstract protected void work ();
public void run ()
{
init();
work();
System.out.println (data);
}
}
public static void main (String[] args)
{
Runnable hello = new Work<String>() {
protected void init () { data = "Hello $1!"; }
protected void work () { data = data.replace ("$1", "World"); }
};
(new Thread(hello)).start();
}
}
为了摆脱多重继承问题,我想将抽象类转换为接口。 但是在Java接口中不能包含主体。 那么,在将抽象类转换为接口之后,必须将通用数据和方法放在哪里?
我担心只要我想共享任何具体内容,就不可能摆脱多重继承问题。 这是正确的吗?
您可以执行以下操作:
Work
界面 AbstractWork
类,它是实现Work
并包含通用代码的AbstractWork
类 AbstractWork
的实现类 这正是JDK中使用List
(接口), AbtractList
(实现List
的抽象类)以及LinkedList
和ArrayList
(扩展AbstractList
的实现类)所使用的功能。
您可能必须将界面与功能分开; 像这样的东西:
public interface Work<T> {
void init();
T work();
}
public class Worker<T> implements Runnable {
private final Work<T> work;
Worker(Work<T> work) {
this.work = work;
}
public void run () {
work.init();
T data = work.work();
System.out.println(data);
}
}
public static void main (String[] args)
{
Runnable hello = new Worker<String>(new Work<String>() {
private String data;
public void init () { data = "Hello $1!"; }
public String work () { return data.replace ("$1", "World"); }
});
(new Thread(hello)).start();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.