我有一个抽象类。我希望每个实例都有一个唯一的 ID。我已经实施:public abstract class MyAbstractClass{ static AtomicInteger nextId = new AtomicInteger(); private int id; public MyAbstractClass() { id = nextId.incrementAndGet(); }}public class MyClass extends MyAbstractClass { public MyClass(){ super(); }}除了没有强制子类调用构造函数的部分之外,这种方法有效。有没有办法为抽象类实现全局 ID?
1 回答
守着一只汪
TA贡献1872条经验 获得超3个赞
没有什么强制子类调用构造函数。
除非父构造函数在层次上构建错误,否则您无法阻止子类调用super()。
通过“层次结构错误”,我的意思是有一个不基于其无参数构造函数的父构造函数。例如,
public MyAbstractClass() {
id = nextId.incrementAndGet();
}
public MyAbstractClass(String s) {
// ignores to call this();
}
否则,任何孩子最终都会调用super(), 并因此触发您的 id 初始化。
添加回答
举报
0/150
提交
取消