【问题标题】:Java: Class extends class with static var, overwriting it - doesn't work - why? [duplicate]Java:类用静态变量扩展类,覆盖它 - 不起作用 - 为什么? [复制]
【发布时间】:2014-10-09 23:43:09
【问题描述】:

我是这样写的:

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,该方法测试给定的 String,如果 Pattern 匹配。

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

【问题讨论】:

标签: java


【解决方案1】:

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

无论如何,您不应该通过实例访问静态方法,因为它会造成混淆。使用A.getName()

【讨论】:

  • +1 指出避免通过实例访问静态方法。大多数 IDE 也会对此发出警告。
  • 是的,完全正确。抽象我的实际代码太快了。
猜你喜欢
  • 2013-10-27
  • 2011-03-02
  • 2014-09-28
  • 2014-07-22
  • 2014-04-19
  • 1970-01-01
  • 1970-01-01
  • 2019-03-03
相关资源
最近更新 更多