java - 在 Java 中,在一个子类中将变量设置为 Final 和 static,同时在其他子类中保持变量不变

标签 java static subclass final superclass

我有一个父类(super class)和两个扩展它的子类。我想初始化一个名为 radius 的变量,它可以在子类 A 中自由设置,但对于子类 B 总是相同的。我可以在每次创建对象 B 时初始化该变量,但我想知道是否可以使子类 B 中的变量 final 和 static,同时仍然能够在我的父类(super class)中实现 getter。我可能会实现更多的子类,它们的半径要么是最终的,要么是可变的。如果不是,我想知道解决我的问题的最优雅的解决方案是什么。这是一些示例代码,可以运行,但不是很好。

abstract class SuperClass {

    public double getRadius() {
        return this.radius;
    }

    protected double radius;
}

class A extends SuperClass{

    public void setRadius(double radius) { // Would like to put this setter in SuperClass for future subclasses.
        this.radius = radius;
    }
}

class B extends SuperClass{
    public B() {
        radius = 0.2; //Want to make this static and final only for this subclass.
    }
}

最佳答案

Making a variable final and static in one subclass, while keeping it variable in others in Java

从技术上讲,你无法做到这一点。 字段要么是静态字段,要么是实例字段,不能同时是两者。
或者,在您想要提供不同值的 B 类中重写 getRadius() :

@Override
public double getRadius() {
    return 0.2;
}

为了使这个常量得到尊重,您还应该重写这个 B 类中的 setter:

@Override
public void setRadius(double radius) {   
   throw new UnsupportedOperationException();
}

关于java - 在 Java 中,在一个子类中将变量设置为 Final 和 static,同时在其他子类中保持变量不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49384171/

相关文章:

java - 无法从静态上下文引用非静态变量 arr

c++ - 将 OpenCV 构建为静态库会导致数以千计的 undefined reference

python - Google App Engine ( GAE ) 和静态文件最佳实践

c++ - C++中子类重定义错误

cocoa - 未在 PDFView 子类上调用 drawRect

java - 从 ComboBox JavaFX 中删除滚动条

java - 获取字符的unicode值

java - 如何向 Intent 对象添加/传递多个值?

java - 添加功能: subclass vs decorator

java - 将 null 设置为 Dagger Singleton 对象