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