gpt4 book ai didi

java - 为什么我们不应该在 java 中使用 protected static

转载 作者:IT老高 更新时间:2023-10-28 11:20:26 29 4
gpt4 key购买 nike

我正在回答这个问题 Is there a way to override class variables in Java?第一条获得 36 票的评论是:

If you ever see a protected static, run.

谁能解释为什么 protected static 不受欢迎?

最佳答案

与其说是直接的问题,不如说是风格上的问题。这表明你没有正确思考类里面发生了什么。

想想static是什么意思:

This variable exists at class level, it does not exist separately for each instance and it does not have an independent existence in classes which extend me.

想想protected是什么意思:

This variable can be seen by this class, classes in the same package and classes which extend me.

这两个含义并不完全相互排斥,但非常接近。

我可以看到您可以将两者一起使用的唯一情况是,如果您有一个旨在扩展的抽象类,并且扩展类可以使用原始定义的常量修改行为。不过,这种安排很可能最终会非常困惑,并表明类设计的弱点。

在大多数情况下,将常量设为公开会更好,因为这只会让一切更整洁,并允许人们进行子类化更多的灵 active 。在许多情况下,组合比继承更可取,而抽象类强制继承。

要查看一个如何破坏事物的示例并说明我所说的变量不具有独立存在的含义,请尝试以下示例代码:

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 而无需限定名称 - 但它不继承或得到它自己的副本。它正在查看内存中完全相同的对象。

关于java - 为什么我们不应该在 java 中使用 protected static,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24289070/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com