【问题标题】:Inherit a Static Variable in Java在 Java 中继承静态变量
【发布时间】:2011-04-24 02:25:26
【问题描述】:

我想要以下设置:

abstract class Parent {
    public static String ACONSTANT; // I'd use abstract here if it was allowed

    // Other stuff follows
}

class Child extends Parent {
    public static String ACONSTANT = "some value";

    // etc
}

这在java中可能吗?如何?如果可以避免的话,我宁愿不使用实例变量/方法。

谢谢!

编辑:

常量是数据库表的名称。每个子对象都是一个迷你 ORM。

【问题讨论】:

  • 离题了,但是如果你要避免使用面向对象的部分,为什么要使用面向对象的编程语言呢?
  • 但是你想达到什么目的?不为 Child 类创建 obj?,创建静态同样昂贵。
  • 你能举个例子说明你如何使用它吗?
  • 我有我的理由,但它们在公共论坛上会不受欢迎。程序很小,这个数据不太可能改变或需要特殊的访问器,而且我来自另一种语言,感觉更自然。我并没有试图避免对象,只是试图将 KISS 应用到我的程序设计中并减少单词计数。我有很多东西,相信我。
  • 可能吗?是的,但肯定有更好的方法。提供更多上下文,您将获得更好的答案,同时学到一些东西

标签: java inheritance static polymorphism static-variables


【解决方案1】:

你不能完全按照你的意愿去做。也许可以接受的妥协是:

abstract class Parent {
    public abstract String getACONSTANT();
}

class Child extends Parent {
    public static final String ACONSTANT = "some value";
    public String getACONSTANT() { return ACONSTANT; }
}

【讨论】:

【解决方案2】:

在这种情况下,您必须记住在 java 中您不能覆盖静态方法。发生的事情是它隐藏了这些东西。

根据您输入的代码,如果您执行以下操作,答案将为空

Parent.ACONSTANT == null ; ==> true

Parent p = new Parent(); p.ACONSTANT == null ; ==> true

Parent c = new Child(); c.ACONSTANT == null ; ==> true

只要你使用 Parent 作为引用类型 ACONSTANT 就会为空。

让你做这样的事情。

 Child c = new Child();
 c.ACONSTANT = "Hi";
 Parent p = c;
 System.out.println(p.ACONSTANT);

输出将为空。

【讨论】:

  • 哇,很酷的例子。感谢您抽出宝贵时间发布:-) +1
猜你喜欢
  • 1970-01-01
  • 2019-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-18
  • 2011-03-29
  • 2016-09-10
相关资源
最近更新 更多