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、抽象メソッドの修飾子で何が起こっているのですか? enum自体はパブリッククラスとして宣言されているため、両方の場合に弱いアクセス権限を割り当てることについて少し理解していませんしたほうがいいのようですpublic

4

1 に答える 1

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();
}
于 2012-07-18T01:48:21.297 に答える