java - 如何在类中创建静态变量,该变量只能由类修改,而不能由实例修改?

标签 java oop static

如何创建只能由类修改而不能由其实例修改的类变量


class BullDog{
    String name;
    static String breed = "BullDog";

    public BullDog(String name){
        this.name = name;
    }
}

public class MainClass{
    public static void main(String [] args){
        Dog Mydog = new BullDog("Fluffy");
        Mydog.breed = "Shepherd"; // Should not be modified

        System.out.Println(Dog.breed);
    }
}

实际输出:

Shepherd

期望的输出:

BullDog

最佳答案

使字段final 保持不变。 static Final 位于类级别。

public class BullDog {
    public String name;
    public static final String breed = "BullDog";

    public BullDog(String name){
        this.name = name;
    }
}

问题在于继承是不可能的。 Poodle 需要自己的静态品种,而你不能让狗提供品种

public abstract class Dog {
    public String name;

    public Dog(String name){
        this.name = name;
    }

    public abstract String getBreed();   
}

public class BullDog extends Dog {

    public BullDog(String name){
        super(name);
    }

    @Override
    public String getBreed() {
        return "Bulldog";
    }
}

public class Poodle extends Dog {

    public Poodle(String name){
        super(name);
    }

    @Override
    public String getBreed() {
        return "Wolf";
    }
}

List<Dog> dogs = Arrays.asList(new BullDog("fluffy"), new Poodle("Herman"));

关于java - 如何在类中创建静态变量,该变量只能由类修改,而不能由实例修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59093769/

相关文章:

java - 使用windowmanager获取手机屏幕尺寸

java - 在 1 轴上旋转四元数?

python - 当函数需要类属性时覆盖Python中的绑定(bind)方法

c - c的良好OO命名方案

Java静态final字段初始化顺序

java - 创建mysql用户和组[windows]

java - 如何在 Java/Scala 中创建 PDF/DOCX 文件?

php - DI 是单例和/或静态对象的唯一解决方案吗?

C - Header 中的函数实现是否应该使用 extern/inline/static?

java - Java中的最终静态变量是线程安全的吗?