有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在一个只能由类修改而不能由其实例修改的类中生成静态变量?

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


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

共 (2) 个答案

  1. # 1 楼答案

    将静态变量设为私有。有关详细信息,请参阅this

  2. # 2 楼答案

    使字段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"));