我正在尝试在Java中的抽象类中编写工厂方法(所以我希望它返回扩展类的新实例,而不是超类).
在PHP中,我使用self
关键字执行此操作:
abstract class Superclass {
public static function factory($arg) {
return new self($arg);
}
private function __construct($arg) {}
abstract public function doSomething() {}
}
Run Code Online (Sandbox Code Playgroud)
Java有关于self
我可以使用的关键字吗?
没有; 在Java中,静态方法的继承方式与非静态方法的继承方式不同.子类将具有其超类的静态方法,但是当它们执行时,它们将在超类的上下文中执行 - 因此没有可以在静态方法中使用的关键字来找出调用该方法的类.
编辑:一个更精确的表述是静态方法根本不被继承; 但是,该语言允许我们Subclass.foo()
用来调用静态方法Superclass.foo()
.
根据您似乎想要实现的内容,您可能希望实现抽象工厂模式.它大概是这样的:
public abstract class Superclass {}
public class SubclassA extends Superclass {}
public class SubclassB extends Superclass {}
public abstract class AbstractFactory {
public abstract Superclass Create();
}
public class FactoryA extends AbstractFactory {
public Superclass Create() {
return new SubclassA();
}
}
public class FactoryB extends AbstractFactory {
public Superclass Create() {
return new SubclassB();
}
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以创建一个采用AbstractFactory
(实际上将是a FactoryA
或a FactoryB
)的方法.调用Create()
此对象将生成a SubclassA
或a SubclassB
.
编辑:修复了编译错误(忘了让工厂扩展AbstractFactory
).
归档时间: |
|
查看次数: |
20836 次 |
最近记录: |