2012-07-18 84 views
2

我完成每一條說明,下面的代碼爲家庭作業:在枚舉爲什麼我不能覆蓋一個公共抽象方法

public enum AccountType { 
    Checking { 
     @Override 
     String acctType() { return "Checking Account"; } 
    }, 
    Savings { 
     @Override 
     String acctType() { return "Saving Account"; } 
    }, 
    CreditCard { 
     @Override 
     String acctType() { return "Credit Card Account"; } 
    }; 

    abstract String acctType(); 
} 

最初,但是,我試圖做的:public abstract String acctType();並取得了以下每個的覆蓋方法錯誤:

stringValue() in cannot override stringValue() in AccountType; 
attempting to assign weaker access privileges; 
was public 

所以我的問題是怎麼回事與public修改的抽象方法?枚舉本身被宣佈爲公共類,所以我不明白指定較弱的訪問權限應該似乎是public

回答

3

錯誤消息意味着如果您定義具有特定可見性的抽象方法,則必須定義具有至少該可見性的實現。

在這種特定情況下,這意味着如果抽象方法是公共的,那麼實現也必須是一樣的。

public enum AccountType { 
    Checking { 
     @Override 
     public String acctType() { return "Checking Account"; } 
    }, 
    Savings { 
     @Override 
     public String acctType() { return "Saving Account"; } 
    }, 
    CreditCard { 
     @Override 
     public String acctType() { return "Credit Card Account"; } 
    }; 

    public abstract String acctType(); 
} 
+0

這明確標記爲一個家庭作業問題 - 你不應該提供一個提示或至少一個解釋,而不是一個完整的解決方案嗎? – Caspar 2012-07-18 01:49:42

+0

@Caspar要清楚的是,上面的代碼來自我已經完成的作業任務......我只是好奇爲什麼我正在經歷這種行爲。我將它標記爲家庭作業,因爲它是作業的一部分,並且它不是真正的代碼*任務關鍵* – 2012-07-18 01:52:50

+0

@DonRoby感謝編輯和解釋。這清除了一點。我沒有想到將重寫的方法聲明爲抽象。 – 2012-07-18 01:55:34

相關問題