这是一个风格上的问题,而不是直接的问题。这表明您没有正确考虑班上正在发生的事情。
考虑一下什么static
意思:
这个变量存在于类级别,它在每个实例中并不单独存在,并且在扩展我的类中没有独立存在。
考虑一下什么protected
意思:
该变量可以在此类,同一包中的类以及扩展我的类中看到。
这两种含义并不完全互斥,但非常接近。
我唯一可以看到的是可以将两者一起使用的情况是,如果您有一个设计为可扩展的抽象类,然后扩展类可以使用原始对象中定义的常量来修改行为。这种安排很可能最终会非常混乱,并表明类的设计存在缺陷。
在大多数情况下,最好将这些常量公开,因为这会使所有内容变得更清洁,并使子类的子类具有更大的灵活性。在很多情况下,组合比继承要好得多,而抽象类则强制继承。
要查看一个示例,说明如何破坏事物并说明变量没有独立存在的含义,请尝试以下示例代码:
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
而无需限定名称-但它不会继承或获取其自己的副本。它正在查看内存中完全相同的对象。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句