繁体   English   中英

Java - 使用枚举扩展类

[英]Java - Extend class with enum

我有一个BaseNumber类,带有一个protected static enum Base ,另一个类ArithmeticBaseNumber extends BaseNumber
我可以从BaseNumber访问Base枚举,但不能从ArithmeticBaseNumber
有没有办法访问枚举?
谢谢!

编辑 - 代码:

public class BaseNumber {
    protected static enum Base {
        X, Y, Z
    }
}
public class ArithmeticBaseNumber extends BaseNumber {}

问题是BaseNumbe.Base.X工作正常,但是ArithmeticBaseNumber.Base.X给出了“The type ArithmeticBaseNumber.Base is not visible”错误。

Java 不支持静态成员的继承,静态成员可以在创建它的类上调用。

它可以访问。 试试下面的例子。

package com.example.demo.enumexample;

public class BaseNumber {
protected static enum Base{
FIRST("first"),
SECOND("second"),
THIRD("third");
String httpMethodType;
Base(String s) {
    httpMethodType = s;
}
public String getHTTPMethodType() {
    return httpMethodType;
}
}

public static void main(String[] args) {
    Base baseNum = Base.FIRST;
    System.out.println(baseNum);
}
}

在 ArithmeticBaseNumber.java 中

package com.example.demo.enumexample;

import com.example.demo.enumexample.BaseNumber.Base;

public class ArithmeticBaseNumber extends BaseNumber{
public static void main(String[] args) {
    Base baseNum = Base.FIRST;
    System.out.println(baseNum);
}
}

输出将是:

第一的

在您的示例代码中,

package com.example.demo.enumexample;

public class BaseNumber {
protected static enum Base{
    X, Y, Z;

}

public static void main(String[] args) {
    Base baseNum = Base.X;
    System.out.println(baseNum);
}
}

package com.example.demo.enumexample;


public class ArithmeticBaseNumber extends BaseNumber{
public static void main(String[] args) {
    Base baseNum = Base.X;
    System.out.println(baseNum);
}
}

输出将是:

X

您定义的一种枚举类型是BaseNumber.Base而不是ArithmeticBaseNumber.Base也不是简单的Base

所以只需通过其专有名称BaseNumber.Base引用它,一切都很好。

您可以(但可能不应该)通过导入使简单名称Base工作:

    import mypackage.BaseNumber.Base;

警告:如果你想使用短名称,我通常建议将Base枚举移到它自己的文件中 - 对我来说,虚线语法是一个重要的提醒,我们正在谈论BaseNumber一些内部元素。

作为类似的情况,出于可读性原因,我总是使用Map.Entry而不是Entry (不清楚它与Map s有关)或HashMap.Entry (完全错误, Entry不是HashMap一部分)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM