[英]Class Hierarchy design for optional attribute
目前,我的應用程序具有以下類層次結構:
目前,“A類”具有稱為“屬性D”的屬性,對於“B類”是強制性的,但在“C類”中是可選的。
我可以知道表示此數據結構的最佳方法嗎? 這樣,我們強制他們使用Class B和Class C引用該字段,而不是讓其他人引用ClassA.getAttributeD而不檢查它是否為NULL。
使用Attribute D
在Class B
添加構造函數。 在Class C
,只有這個屬性的setter。
abstract class A {
Object attributeD;
void setAttributeD(Object attributeD) { this.attributeD = attributeD; }
Object getAttributeD() { return attributeD; }
}
class B extends A {
B(Object attributeD) { this.attributeD = attributeD; }
}
class C extends A {
}
不要過度使用繼承。 通常它會使事情變得更加復雜。 您可以在問題中看到這一點。
看看這個:
Class A {
private int d = 1;
protected int getD() {
return d;
}
}
Class B extends A {
public void doStuff() {
B b = new B();
System.out.println(b.getD());
}
}
Class C extends A {
public void doStuff() {
C c = new C();
System.out.println(c.getD());
}
}
您的主要問題是避免用戶訪問attribute D
您可以通過將attribute D
設置為私有來執行此操作,然后聲明受保護的方法以訪問該屬性。 這樣,子類就能夠訪問該屬性。
使A中的字段受到保護,或將其保密,並使其訪問者受到保護。
因此,A類用戶無法訪問該字段,但B類和C類可以使用它,並且可以為其公開訪問者。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.