Java 为什么可以';在枚举中重写公共抽象方法

Java 为什么可以';在枚举中重写公共抽象方法,java,enums,abstract,Java,Enums,Abstract,根据家庭作业说明,我完成了以下代码: 公共枚举帐户类型{ 检查{ @凌驾 字符串acctType(){return“Checking Account”;} }, 储蓄{ @凌驾 字符串acctType(){返回“储蓄帐户”;} }, 信用卡{ @凌驾 字符串acctType(){返回“信用卡帐户”;} }; 抽象字符串acctType(); } 然而,最初我尝试这样做:public abstract String acctType()并在每个重写的方法上收到以下错误: stringValue(

根据家庭作业说明,我完成了以下代码:

公共枚举帐户类型{
检查{
@凌驾
字符串acctType(){return“Checking Account”;}
},
储蓄{
@凌驾
字符串acctType(){返回“储蓄帐户”;}
},
信用卡{
@凌驾
字符串acctType(){返回“信用卡帐户”;}
};
抽象字符串acctType();
}
然而,最初我尝试这样做:
public abstract String acctType()
并在每个重写的方法上收到以下错误:

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

所以我的问题是抽象方法上的
public
修饰符是怎么回事?enum本身被声明为一个公共类,因此我不理解当两者看起来都是
public

时分配较弱的访问权限的意义。错误消息意味着,如果定义具有特定可见性的抽象方法,则必须定义至少具有该可见性的实现

在这种特定情况下,这意味着如果抽象方法是公共的,那么实现也必须是公共的

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();
}

这显然被标记为一个家庭作业问题-你不应该提供一个提示或至少一个解释,而不是一个完整的解决方案吗?@Caspar说得很清楚,上面的代码来自我已经完成的一个家庭作业。。。我只是好奇为什么我会有这种行为。我把它标记为家庭作业,因为它是作业的一部分,而任务并不是真正的代码critical@DonRoby谢谢你的编辑和解释。这就有点清楚了。我不认为要将被重写的方法声明为抽象方法。@HariSeldon不是我认为你在让别人为你做工作,而是我认为你可能想知道发生了什么,这样你就可以自己修复它。唐的编辑现在已经解决了这个问题——干得好,唐。@Caspar我想我读这篇文章是出于作者的意外意图,也就是说,我认为这是一篇已经完成的作业,他希望能更好地理解。你是对的,如果没有这些知识,提示会比完整的解决方案更好。当然,在这种情况下,完整的解决方案很简单,写一个解释需要更多的时间。我完全打算在编辑中解释。