【问题标题】:Inheriting enum values java继承枚举值java
【发布时间】:2013-10-29 08:53:32
【问题描述】:

所以我一直在搜索,希望能找到某种想法或解决方法。

我有一个名为movie 的基类,其实例变量为id、name、loaned 和borrower。这个电影类然后由两个类 Bluray 和 dvd 派生。基本上长话短说,它们都构建在我正在构建的库类中。在电影类型中,我想创建一个名为流派的枚举变量,它保存可以应用于电影的流派。但是,我不确定如何将这个枚举变量继承到 Bluray 和 dvd 类。

有人告诉我这是可以做到的,但如果有人能说明我是如何解决这个问题的,那就太好了!

【问题讨论】:

  • Java extend enum的可能重复
  • @sᴜʀᴇsʜᴀᴛᴛᴀ:不,她不是在问如何从枚举中推导出来。

标签: java class inheritance enums


【解决方案1】:

在电影类型中,我想创建一个名为流派的枚举变量,它保存可以应用于电影的流派。但是我不确定如何将这个枚举变量继承到 Bluray 和 dvd 类。

只需使其成为不是private 的电影类型的成员。 (或者只是电影类型之外的同一个包中的一个枚举。)然后 Bluray 和 dvd 类将可以访问它。

例子:

Movie.java:

public class Movie {

    public enum Genre {
        Horror,
        SciFi,
        RomCom
    };

    protected Genre genre;

    public Movie(Genre g) {
        this.genre = g;
    }
}

BluRay.java:

public class BluRay extends Movie {

    public BluRay(Genre g) {
        super(g);
    }
}

请注意,Genre 根本不必在Movie 之内,如果不是,你可能会更好(只是在同一个包或类似的包中)。但是如果你想要 Genre in Movie,你可以在那里。


旁注:您没有要求对您的设计提供反馈,但 FWIW 我可能不会将 Genre 设为枚举,因为您必须重新编译才能添加流派,这似乎是一种常见的操作。

【讨论】:

  • 感谢 T.J!简单而有效!
【解决方案2】:

您可以将枚举与您的类分开声明(在一个新文件中),然后在我声明枚举类型的变量 movie_type 的电影类中使用。

【讨论】:

    【解决方案3】:

    当您想使用父类的成员时,您必须提供对它的访问权限。

    Java 将访问修饰符指定为 public、protected、(默认)、private。

    如果您将访问修饰符设置为受保护,您将能够读取和写入该成员。

    顺便说一句

    以枚举形式存储性别的想法并不是最好的设计,因为性别会发生变化,您必须在应用程序开始时添加它们中的每一个。

    枚举的好解决方案是设备类型。例如 DVD 或 CD,因为这是您可以轻松管理的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-19
      • 2016-01-16
      相关资源
      最近更新 更多