【问题标题】:java overriding static fields [duplicate]java覆盖静态字段[重复]
【发布时间】:2016-08-15 04:01:13
【问题描述】:
public class A {
       public String s="A";
       public static int i=1;
   }
public class B extends A {
      public String s="B";
      public static int i=2;
public static void main(String [] args) {
              A a= new B();
              B b= new B();
              System.out.print(a.s+a.i);
              System.out.print(b.s+b.i);
}
}

为什么输出是“A1B2”而不是“A1B1”?难道字段不能被覆盖,静态字段也不能吗?

【问题讨论】:

  • 你没有覆盖任何东西——你是在隐藏字段。
  • 静态字段可以“隐藏”吗?
  • 隐藏和覆盖有什么区别?

标签: java inheritance static overriding


【解决方案1】:

您似乎对覆盖的概念感到困惑。

在 Java 中,就类变量而言,您不会覆盖它们,而是隐藏它们。

重写是实例方法。隐藏是实例变量。

隐藏和覆盖是不同的。

【讨论】:

  • +1 只是因为这个答案是完全正确的,并且可能只被问题作者投票 -1,因为他不理解或不想听到答案......
猜你喜欢
  • 1970-01-01
  • 2018-08-15
  • 2018-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多