谁能向我解释为什么 java 允许您从实例访问静态方法和成员?一个不好的例子,如果我有一个名为 RedShape 的类,它有一个名为 getColor() 的静态方法,它返回“red”,为什么 java 允许您从 RedShape 的实例调用静态方法?对我来说,这似乎违反了 OO 语言设计的一些核心概念。至少,它应该带有编译器警告。
提前致谢。
编辑:
特别是,我想问你什么时候有类似的事情
RedShape test = new RedShape();
test.getColor();
其中 getColor 是 RedShape 类的静态方法。这没有任何意义,它被允许并且不会通过 javac 在命令行上给出编译器警告。我看到它“强烈反对”,但很好奇是否有技术或合理的原因允许它在“因为 C++ 允许它”之外的原因。
最佳答案
实例调用静态方法我没有发现任何问题。这有什么问题吗?特别是,经常有一些方法在类的逻辑中很有用,但实际上不需要操作实例本身。
我确实反对通过实例引用调用静态方法。经典例子:
Thread thread = new Thread(...);
thread.sleep(5000); // Doesn't do what it looks like
这在某些 IDE 中带有编译器警告 - 当然在 Eclipse 中,假设您打开它。 (Java/编译器/错误和警告/代码风格/对静态成员的非静态访问。)我个人认为 那 是 Java 设计中的一个错误。 (这是 C# 设法避免复制的错误之一。)
关于java - 从实例引用 Java 中的静态方法/变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1439834/