class Dad { protected static String me = "dad"; public void printMe() { System.out.println(me); } } class Son extends Dad { protected static String me = "son"; } public void doIt() { new Son().printMe(); }
函数 doIt 将打印“dad”。有没有办法让它打印“儿子”?
是的。但就变量而言,它被覆盖(为变量赋予新值。为函数赋予新定义是覆盖)。只是不要声明变量,而是在构造函数或静态块中初始化(更改)。
在父类的块中使用时会反映该值
如果变量是静态的,则在初始化期间使用静态块更改值,
class Son extends Dad { static { me = "son"; } }
否则在构造函数中发生变化。
您也可以稍后在任何块中更改该值。它将反映在超类中