[英]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.