为什么静态内部类的静态域必须是final?

时间:2021-08-12 18:24:12

一、课本解释

       我们希望一个静态域只有一个实例 ,不过对于每个外部对象,会分别有一个单独的内部类实例。如果这个域不是fianl,
    它可能是不唯一的。

二、我的理解

   把一个类声明为内部类,通常是因为它和外围类是有一定联系的。现在我们把手机声明为外围类,手机屏幕声明为内部类
public class MobilePhone {
      private String name;

      public void create(Screen screen) {
        ...
        // 通过给定的手机屏做了一个手机
        ...
      }

      // 内部类,只有内部类可以声明为私有
      public class Screen {
      //屏幕大小
      public static final double size = 5.6;
     }
}

现在张三和李四都创建了一个手机。现在假设张三嫌屏幕太小。于是想通过MobilePhone.Screen.size = 10;修改下屏幕的大小。我们知道类的static属性是共享的,那么可想而知李四的屏幕也跟着“膨胀”了。这样会吓到别人滴。为了避免这种风险,对于“共享变量(static)”,一定要final。