【问题标题】:Why I'm able to access static method [duplicate]为什么我能够访问静态方法 [重复]
【发布时间】:2017-09-28 06:19:54
【问题描述】:

我从具有静态方法的类(B) 扩展了一个类(A),然后在其他类(C) 中创建类(A) 的实例,并且我能够访问 B 类的静态方法,为什么会这样发生?

A类:

public class NetworkUtils extends AbsClass {}

B类:

public class AbsClass {
static public void eat(){}
}

C类:

Networkutills network = new Networkutills();
network.eat();    //why should I access eat class method

【问题讨论】:

  • 你为什么认为你不应该能够做到这一点?
  • 静态方法是 public :任何类都可以调用这个方法。另见:stackoverflow.com/questions/10459487
  • 因为你将 NetworkUtils 扩展到 AbsClass,这意味着 NetworkUtils 将继承 AbsClass 的所有属性,所以很明显你可以通过为 NetworkUtils 创建一个实例来访问 AbsClass 的所有方法
  • "但是静态成员可以通过类名而不是实例来访问" true,但不幸的是 Java 允许instance.staticMethod(),因为在编译时这样的代码将被更改为ClassOfInstance.staticMethod()。许多人认为允许这种语法是一个糟糕的设计决策,因为它不仅没有帮助,反而让 Java 新手感到困惑,他们开始认为 staticMethod 可以在 instance 本身上调用(这是不正确的)。所以network.eat();会被编译成Networkutills.eat(),这段代码是正确的,原因重复解释。

标签: java oop inheritance static


【解决方案1】:

因为A类继承了B类。

也许您对this 感兴趣。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 2014-12-20
    • 2010-09-29
    • 2017-10-06
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多