2012-07-18 87 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

相关问题