2010-10-28 104 views
2
public abstract ClassName 
{ 

// methods 
// setters & getters...??? 

} 
+9

它會花費你30秒找出。它可以編譯或不編譯。 – Oded 2010-10-28 08:12:26

+1

感謝Oded以及我是一個初學者,你必須放鬆一下;) – 2010-10-28 08:16:36

+1

@W M-只是懶得問這樣的事情而不是嘗試。你有一個編譯器 - 如果你想知道這樣的事情是否可能,試試吧。如果編譯器無效,則會報告。如果對你來說會更快,你會在這個過程中學到一些東西。 – Oded 2010-10-28 08:19:13

回答

10

簡短的回答:是:

public abstract class ClassName { 
    private String field; 

    public String getString() { 
     return field; 
    } 

    public void setString(String field) { 
     this.field = field; 
    } 
} 

更多擴展的答案(我不知道它的實際供你現在):

應該認識到,這些方法(如果他們沒有用final修飾符聲明)可以在子類中被覆蓋。這就是爲什麼認真考慮方法合同並仔細記錄它們的原因。如果抽象類的其中一個方法調用另一個方法,那麼這個事實也應該記錄下來。

抽象類的所有受保護和公共方法(以及常量,在極少數情況下都是受保護的字段)將成爲API的一部分。因此,其他開發人員可以使用它們,並且改變它們並不容易。

的最佳做法:

1)三思而後使你Serializable課前 - 這將使所有子類searializable也和(如果你想生產沒有可能存在問題的程序),你應該關心的任何可能的序列化子類。

2)實施Cloneable的實際情況也是如此(最好不要在頂級抽象類中實現它)。

3)您應提供正確equalshashCode實施考慮到2子類可以​​用從抽象類的實現進行比較。

4)考慮提供自然順序(即實現Comparable接口)。如果存在真正的自然順序,通常是一個好主意。

+0

只是好奇,應該這樣做?我的意思是,任何Java最佳實踐? – zengr 2010-10-28 08:14:02

+0

當然,爲什麼不呢?字段屬於ClassName。事實上,因爲它是私人的,所以它是獲取/設置者唯一可能的地方。 – EboMike 2010-10-28 08:15:13

+0

爲什麼不呢?告訴我任何不該做的理由? – foret 2010-10-28 08:16:48

-3

夥計們當然實現一個抽象類型修飾符getter()會導致編譯錯誤!

+1

我想知道您只註冊了這個答案嗎? – 2015-12-28 14:04:44

相關問題