首页 > 解决方案 > 如何在类中制作静态变量,只能由类而不是它的实例修改?

问题描述

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


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

标签: javaoopstatic

解决方案


使字段final保持不变。并且static final处于班级水平。

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

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

问题是继承是不可能的。贵宾犬需要自己的静态品种,你不能让狗提供品种

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"));

推荐阅读