我有一個(gè)抽象類(lèi)。我希望每個(gè)實(shí)例都有一個(gè)唯一的 ID。我已經(jīng)實(shí)施: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(); }}除了沒(méi)有強(qiáng)制子類(lèi)調(diào)用構(gòu)造函數(shù)的部分之外,這種方法有效。有沒(méi)有辦法為抽象類(lèi)實(shí)現(xiàn)全局 ID?
1 回答

守著一只汪
TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個(gè)贊
沒(méi)有什么強(qiáng)制子類(lèi)調(diào)用構(gòu)造函數(shù)。
除非父構(gòu)造函數(shù)在層次上構(gòu)建錯(cuò)誤,否則您無(wú)法阻止子類(lèi)調(diào)用super()。
通過(guò)“層次結(jié)構(gòu)錯(cuò)誤”,我的意思是有一個(gè)不基于其無(wú)參數(shù)構(gòu)造函數(shù)的父構(gòu)造函數(shù)。例如,
public MyAbstractClass() {
id = nextId.incrementAndGet();
}
public MyAbstractClass(String s) {
// ignores to call this();
}
否則,任何孩子最終都會(huì)調(diào)用super(), 并因此觸發(fā)您的 id 初始化。
添加回答
舉報(bào)
0/150
提交
取消