根據this question的回答,考慮到我有一個在聲明中初始化字段的類,當我擴展該類並需要子類具有不同的默認值時,我應該怎麼做?當子類在構造函數中初始化時,我應該在超類的聲明中保持字段初始化嗎?
我應該在子類的構造函數分配新的默認值,並保持在該聲明的超?:
public class Bird {
private boolean flight = true;
}
public class Penguin extends Bird {
public Penguin() {
flight = false;
}
}
或者我應該重構,使這兩個類初始化在構造函數中的字段賦值?
從this question的答案看來,沒有顯着的技術差異,所以這是一個關於語義的問題。
目前,該代碼甚至無法編譯,因爲'企鵝'無法訪問'鳥'。就我個人而言,我會在'Bird'中提供一個受保護的構造函數,讓子類爲'flight'提供一個值 - 這樣您就可以保持字段的私有性並使其成爲最終的。 –
航班是私立的兒童班。 – Optional
儘管存在可見性問題,它會將此視爲基於意見。就個人而言,我優先在父'Bird'中定義一般/默認值。但是所有的孩子都會用自己需要的價值來重寫他們。因此,如果我或其他人忘記在孩子中設置一個值,那麼父母中的值只是作爲默認值或回退值存在。 – Korashen