Java 复制构造函数和继承
我对java对象拷贝和继承很好奇。假设我有以下两个类:Java 复制构造函数和继承,java,inheritance,copy-constructor,Java,Inheritance,Copy Constructor,我对java对象拷贝和继承很好奇。假设我有以下两个类: abstract class Algorithm { public abstract void run(); } class Specialized extends Algorithm { @Override public void run(); } 现在我想测试专门的算法。我真的很想与多个实例/参数并行执行此操作。问题是run方法是不可重入的,因此我必须有专用的的每个线程实例。当然,任何类型的AlgorithmRunner
abstract class Algorithm {
public abstract void run();
}
class Specialized extends Algorithm {
@Override
public void run();
}
现在我想测试专门的算法。我真的很想与多个实例/参数并行执行此操作。问题是
run
方法是不可重入的,因此我必须有专用的的每个线程实例。当然,任何类型的AlgorithmRunner
都应该与抽象类Algorithm
一起工作,以便能够测试多个不同的专门化。问题是我需要构造一个新的?以通用方式从现有算法扩展算法
。我怎样才能做到这一点?我可以很容易地为每种专门化编写复制构造函数,但这需要使用instanceof
检查的开关,我宁愿避免这种检查。有几种方法可以做到这一点。一种是使用算法
使用抽象工厂方法获取实例:
abstract class Algorithm {
public abstract void run();
protected abstract Algorithm buildInstance();
}
class Specialized extends Algorithm {
@Override
public void run() {
// ...
}
@Override
protected Algorithm buildInstance() {
return new Specialized();
}
}
FWIW,我倾向于让算法运行程序
与算法
分离,并让它接受算法创建者
或类似工厂方法的实例。您可以尝试使用:
然后将AlgorithmFactory传递给AlgorithmRunner,允许它在不知道算法实现的情况下实例化算法的子类。在非抽象类中不能有抽象方法。尽量使您的示例正确,这样我们就可以确定您所说的(例如,抽象类或非抽象方法)是否可以使用Object.clone()
作为选项?嗯,许多人似乎反对克隆(),我明白他们的观点…可能是克隆的重复
interface AlgorithmFactory {
public abstract Algorithm createAlgorithm();
}
class SpecializedFactory implements AlgorithmFactory {
@Override
public Specialized createAlgorithm() {
return new Specialized();
}
}