您好我有一个抽象类,它有许多子类。我想把这个抽象类'constrcutor私有化并创建工厂方法。这个方法应该如何在每个子类中以相同的方式工作?如果我做:
return new AbstractClass();
我得到错误说:类是抽象的,不能是实例......我应该使用反射吗?
答案 0 :(得分:0)
您可以使用super
关键字从子类访问抽象类的构造函数。
public SubClass() {
super(); // this will call AbstractClass()
// something else that you want to do for this subclass
}
答案 1 :(得分:0)
正如评论中已经指出的那样,您不能将new
关键字与抽象类一起使用。当您使用new时,您需要知道真实的类型。
您可以在抽象基类中实现工厂方法,并根据传递给create方法和/或某些内部逻辑的参数决定返回哪个非抽象子类。
或者您可以将工厂方法本身抽象化并在每个非抽象子类中实现它以返回该类型的对象。