一個接口不能保持數據的類可以保持場的方式。如果你不想讓你的Kit
被實例化,你很可能需要一個抽象類。把它們看作一個可以有一些實現和字段的接口。
注意,請閱讀進一步clarfication:Read More
所以,你要在這個東西有一個抽象類的背景,而不是一個接口。現在看起來如何?
public abstract class Kit {
protected final String name = "Foo";
public String getName() {
return name;
}
}
這裏,我們有我們的工具包,實現Kit
每類將有機會獲得name
領域。如果它應該是一個常量,我可能會建議將它放在大寫字母上。對於靜態屬性也可能是最好的。更多的可以閱讀here。
爲了說明我已經從我們的abstract class Kit
繼承了兩個類。 Ninja
和Test
。
public class Ninja extends Kit {
}
該類目的只是爲了檢查是否name
真的有Foo
或沒有價值。
然後我們也需要我們的實際測試類。
public class Test extends Kit {
public static void main (String[] args) {
Test ninja = new Test();
System.out.println(ninja.getName()); // foo
Ninja ninja2 = new Ninja();
System.out.println(ninja2.getName()); // foo
}
}
它們都是不同的類型,Test
RESP。 Ninja
,但它們在name
字段中的值均爲foo
。對於從Kit
繼承的每一個班級來說都是如此。
如果必須重寫是必需的話,我建議增加Kit
的constructor
強制用戶從基類中添加數據。
public abstract class Kit {
protected String name;
public Kit (String name) {
this.name = name;
}
public String getName() {
return name;
}
}
現在每天從Kit
繼承類必須調用super (String)
,這意味着name
場將爲每個對象設置。它可以與class A extends Kit
和class B extends Kit
不同。這是你搜索的嗎?
如果是這樣,那麼實施class A
和class B
將沿着這些方向。
class A extends Kit {
public A (String name) {
super (name);
}
}
而對於B
它將如下所示。
class B extends Kit {
public B (String name) {
super (name);
}
}
現在他們屬於不同類別,可以容納不同的領域和方法,但它們都需要設置的基類的name
領域:Kit
。
來源
2015-06-10 17:07:44
Emz
所以你想要所有的類都有一個唯一的名字,但要確保所有的實現都有'String getName()'方法?對我來說,聽起來更像是抽象類而不是界面。 – Emz
@Emz _implementations_是什麼意思? –
當你'忍者=新的忍者();忍者B =新的忍者();'你想'了'和'B'能夠有不同的價值觀?在他們的名字領域,雖然仍然確保他們有名字領域? – Emz