【发布时间】:2013-05-13 02:46:29
【问题描述】:
我知道我们不能覆盖 Java 中的静态方法,但是有人可以解释以下代码吗?
class A {
public static void a() {
System.out.println("A.a()");
}
}
class B extends A {
public static void a() {
System.out.println("B.a()");
}
}
我如何能够覆盖 B 类中的方法 a()?
【问题讨论】:
-
因为你没有。
B.a()只能通过类B访问。如果你有类似A a = new B(); a.a();的东西,它会打印“A.a()”,即使它是 B 类型。如果它真的被覆盖,那么它会打印“B.a()”。请注意,Java 的奇怪特性是允许您从对象实例调用静态方法,这有助于在此造成混乱。 -
是什么让您认为您在
B中覆盖了a?您可以通过在该方法之前添加@Override注释来轻松测试。 -
如果您从
B中删除a()函数,您可以测试a()是否被B继承。它确实继承,但不会覆盖。相反,如果您在B中声明另一个a()函数,它会隐藏a()。 -
@Dorus dlev 现在明白了。谢谢你。
标签: java static-methods overriding