java 强制扩展类
在Java中,我可以以某种方式强制扩展抽象类的类以对象作为参数来实现其构造函数吗?
像这样的东西
public abstract class Points {
//add some abstract method to force constructor to have object.
}
public class ExtendPoints extends Points {
/**
* I want the abstract class to force this implementation to have
* a constructor with an object in it?
* @param o
*/
public ExtendPoints(Object o){
}
}
In Java, can I somehow force a class that extends an abstract class to implement its constructor with a Object as a parameter?
Something like
public abstract class Points {
//add some abstract method to force constructor to have object.
}
public class ExtendPoints extends Points {
/**
* I want the abstract class to force this implementation to have
* a constructor with an object in it?
* @param o
*/
public ExtendPoints(Object o){
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
continue
You can use a constructor with a parameter in your abstract class (make it protected if you want to dis-allow anonymous subclasses).
Doing that, you force the implementing class to have an explicit constructor, as it must call the super constructor with one parameter.
However, you cannot force the overriding class to have a constructor with parameters. It can always fake the parameter like this:
As said by others before, the signatue of Constructors cvannot be enforced, but you could enforce a particular set of arguments by using the AbstractFactory pattern instead. Then you can define the create methods of your factory interface to have a particular signature.
No Constructors aren't inherited, so each Class needs to provide its own, unless you don't specify a constructor and get the default no args constructor.
可能在编译时不可能,但您可以使用反射在运行时检查是否声明了所需的构造函数:
Probably there it's not possible at compile time, but you can use reflection to check at run time if the desired constructor was declared:
如果您向 Points 添加
public Points(Object o) {}
构造函数,则会强制所有子类构造函数调用该超级构造函数。但是我认为没有办法确保子类使用确切的构造函数签名。If you add a
public Points(Object o) {}
constructor to Points, you force any subclass constructors to call that super constructor. However I don't think there's no way of ensuring that subclasses use that exact constructor signature.编辑
嗯,不,不可能强制执行带有参数的构造函数。
EDIT
Well, no, its not possible to force the implementation of a constructor with argument.