[英]Override class variable/method on inherited classes
我已经定义了一个类,并且希望有一个类方法(或变量,我不在乎),每个继承的类都需要重写该方法。 我最好的方法是不成功的:
public abstract String getHumanString();
,因为抽象方法不能是静态的
public static String getHumanString();
,因为静态方法只能被隐藏,不能被覆盖。
我不知道我是否可以使用其他技巧。 我也可以高兴地自动在父类上通过诸如getHumanString()
class.getClass().getName()
)之类的方法自动定义getHumanString()
getName()
根据我的需要,我会让getName()
看起来更漂亮) , getName()
在静态方法上不可访问。 因此,总而言之,我的问题是:
1.我可以有一个可以在子类上进行编辑的静态方法/变量吗?
或者,作为另一个有效的解决方案:
2.我可以创建一个使用自己的类名播放的静态方法吗?
提前致谢。
编辑:
想象一下这种情况(我将在此处直接编写代码,所以我将跳过无用的行):
class ParentClass {
public static (or whatever) String getHumanString() {
return "My Parent Class";
}
public static showMyInfo() {
System.out.println(getHumanString());
}
}
class ChildClass {
@Override
public static (or whatever) String getHumanString() {
return "My Child Class";
}
}
...
public static void main()
{
ChildClass.showMyInfo();
}
它应该输出(如我所愿)“我的孩子班”,但实际上却输出(众所周知)“我的父母班”。
静态方法不是多态的,不是。 顺便说一句,变量也不是-您不能覆盖变量,甚至不能覆盖实例变量。 您可以隐藏它们,但不能覆盖它们。
坦白说,您实际上并不清楚要做什么,但是您可能需要考虑一个对应的类型层次结构,以便静态方法成为新类型中的实例方法。
我希望每个类都有一个可读的名称(不仅仅是getClass()。getName()),它不依赖于对象实例。 实际上,当我需要getHumanString()时,我想避免实例化该类。
有一个属性文件,其类名为键,人为字符串为值。 还有一个静态方法可以在某处读取它。
static String getHumanString(Class<?> clazz){
return humanStrings.getProperty(clazz.getName(), clazz.getSimpleName());
}
必要时还可以进行本地化。 另外,您可以“增强”您无法更改其定义的现有类。
如果有此要求,我建议将static
成员和字段拆分为自己的类。 这样,您现有的类可以引用一个多态类的单个static
实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.