我正在解决这个问题,有没有一种方法可以覆盖Java中的类变量? 第36条反对意见是:
如果您看到protected static,请运行。
protected static
谁能解释为什么protected static皱眉呢?
这是一个风格上的问题,而不是直接的问题。这表明您没有正确考虑班上正在发生的事情。
考虑一下什么static意思:
static
此变量存在于类级别,在每个实例 中并不单独存在,并且在扩展me的类中没有独立存在 。
考虑一下什么protected意思:
protected
该变量可以在此类,同一包中的 类以及扩展我的 类中看到。
这两种含义并不完全互斥,但非常接近。
我唯一可以看到的是可以将两者一起使用的情况是,如果您有一个设计成可扩展的抽象类,然后扩展类可以使用原始对象中定义的常量来修改行为。这种安排很可能最终会变得非常混乱,并且表明类的设计存在缺陷。
在大多数情况下,最好将常量设为public,因为这样会使所有内容更清洁,并使子类的子类具有更大的灵活性。在很多情况下,组合比继承要好得多,而抽象类则强制继承。
要查看一个示例,说明如何破坏事物,并说明变量没有独立存在的含义,请尝试以下示例代码:
public class Program { public static void main (String[] args) throws java.lang.Exception { System.out.println(new Test2().getTest()); Test.test = "changed"; System.out.println(new Test2().getTest()); } } abstract class Test { protected static String test = "test"; } class Test2 extends Test { public String getTest() { return test; } }
您将看到结果:
test changed
自己尝试一下:https://ideone.com/KM8u8O
类Test2是能够访问静态成员test从Test无需限定名称-但它没有继承或让自己的副本。它正在查看内存中完全相同的对象。
Test2
test
Test