Java:类使用静态var扩展类,覆盖它 - 不起作用 - 为什么?

时间:2014-08-16 12:03:35

标签: java

我写了这样的话:

public abstract class A {
    static String name = "A";

    public static String getName() {
        return this.name;
    }
}

public class B extends A {
    static String name = "B";
}

public class C extends A {
    static String name = "C";
}

当我致电B b = new B(); System.out.println(b.getName());时(当然更好System.out.println(B.getName());)我得到A而不是B(对C来说相同)。

我不明白为什么。有人可以给我一个手动波吗?


感谢您的回答!

但我该怎样做呢?

在我的情况下,我想制作一个URL管理器。该变量包含一个Pattern,如果Pattern匹配,该方法将测试给定的String。

扩展A的每个类都必须具有Pattern并使用相同的方法来测试它是否匹配。它也应该是静态的,因为我只想实例化,如果模式匹配。

1 个答案:

答案 0 :(得分:4)

静态成员没有多态性,数据成员也没有多态性。多态性仅存在于例如(非静态)方法中。您的静态getName()方法在A中定义,并返回A中定义的静态成员的值。

无论如何,你不应该通过实例访问静态方法,因为它令人困惑。使用A.getName()