所以我已经知道在抽象类中使用静态方法是不可能的。但是,是否有一种方法可以在不实例化的情况下访问其子类中的重写方法?
例如,假设我有两个类,一个抽象类元素及其子类Hydrogen,如下所示。这假设我将有多个类似的类,例如Helium,Boron等,它们都是Element的子类。
public abstract class Element {
public abstract double getMolarMass();
}
public final Hydrogen extends Element {
@Override
public double getMolarMass() {
return 1.008;
}
}
如何在不必实例化Hydrogen对象的情况下调用getMolarMass方法?
答案 0 :(得分:1)
在我看来,您希望能够访问子类中的常量,同时允许涉及这些值的多态行为。你可以有一个常量,也可以从你的方法中返回它:
public final class Hydrogen extends Element {
public static final double MOLAR_MASS = 1.008;
@Override
public double getMolarMass() {
return MOLAR_MASS;
}
}
然后,您可以静态访问常量:Hydrogen.MOLAR_MASS
。
答案 1 :(得分:0)
如果方法不是静态的,那么你就不能静态调用它, 另一方面,重写静态方法毫无意义,在java中不允许...
答案 2 :(得分:0)
你想要实现的是创建一个枚举。有一个enum关键字,可以让你直接做你想要实现的目标。
枚举实际上是一个带有几个公共静态最终成员变量的最终类,它们保存对类实例的引用。
enum Element
{
Hydrogen(1.0),
Helium(2.0),
...;
private double mass;
private Element(double masss)
{
this.mass = mass;
}
public double getMasss()
{
return mass;
}
}
您可以直接访问这些字段,例如:
Element e = Element.Helium;
System.out.println("The mass of " + e + " is " + e.getMass());