我有一個抽象類。我希望每個實例都有一個唯一的 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條經驗 獲得超4個贊
沒有什么強制子類調用構造函數。
除非父構造函數在層次上構建錯誤,否則您無法阻止子類調用super()。
通過“層次結構錯誤”,我的意思是有一個不基于其無參數構造函數的父構造函數。例如,
public MyAbstractClass() {
id = nextId.incrementAndGet();
}
public MyAbstractClass(String s) {
// ignores to call this();
}
否則,任何孩子最終都會調用super(), 并因此觸發您的 id 初始化。
添加回答
舉報
0/150
提交
取消