前提・実現したいこと
抽象クラスのenumを継承したいです。
発生している問題・エラーメッセージ
ネットで調べたところ、列挙型のenumは継承できないとあり、 やり方が分からず躓いております。
該当のソースコード
java
1public enum Enum { 2 a, 3 b 4} 5public abstract class A { 6 abstract public Enum getEnum(); 7} 8 9public class B extends A { 10 public Enum getEnum(){ 11 return Enum.a; 12 } 13} 14 15public class C extends A { 16 pubic Enum getEnum() { 17 return Enum.b; 18 } 19}
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
「該当のソースコード」部分ですが、「こう書いてみたらエラーになったもの」でしょうか、それとも「どうすればいいかわからず途中で止まってしまった状態」でしょうか?
書き方が分からず、途中で止まってしまっている状態です。
> 列挙型のenumは継承できないとあり、やり方が分からず躓いております。
「何のために」列挙型を継承したかったのでしょうか?
共通項があれば、抽象メソッドに定義して継承すると考えており、
要素は違うもののEnum自体は共通項のため継承として書こうと思いました。
> 要素は違うもののEnum自体は共通項のため
どういう意味ですか?
クラスBではEnum.a;
クラスCではEnum.b;
Enumは同じなので継承元のクラスAに定義した方がいいのではないかと考えました。
> Enumは同じなので継承元のクラスAに定義した方がいいのではないかと考えました。
「Enumは同じ」であれば、そのとおり同じEnum型を使えばいいだけで、Enum自体を継承させる必要はなにもないと思うのですが、何か違う点が気になる感じでしょうか?
public Enum getEnumを抽象メソッドとして定義しなさい。
という指定がありまして、抽象メソッドとして定義したのなら継承しなければ意味がないのではないかと考えています。
> 抽象メソッドとして定義したのなら継承しなければ意味がないのではないかと考えています。
それは「同じEnum型を使う」こととは全く無関係です(「該当のソースコード」ですでにAを継承して実装することが実現できています)。
同じEnumを持つ場合、継承の処理を書かなくても実質継承した形になっているということでしょうか?
えっと、継承すべきはAなのであって、Enumではありません(抽象メソッドの引数がStringだったとして、継承した場合に引数を「Stringを継承した型」に変えることは、ほぼないかと思います)。
すでに、class B extends Aなどのように「Aを」継承できています。
Enumの継承ばかり考えておりました。
理解力がないにもかかわらず、
ご丁寧に返信いただきありがとうございます。