我写了这样的话:
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并使用相同的方法来测试它是否匹配。它也应该是静态的,因为我只想实例化,如果模式匹配。
答案 0 :(得分:4)
静态成员没有多态性,数据成员也没有多态性。多态性仅存在于例如(非静态)方法中。您的静态getName()
方法在A
中定义,并返回A中定义的静态成员的值。
无论如何,你不应该通过实例访问静态方法,因为它令人困惑。使用A.getName()
。