Java 8:扩展class静态方法好还是直接调用静态方法好?

Java 8: Better to extend class of static methods or better to call static methods directly?

我正在将一些旧的 Java 4 代码更新为 Java 8(太多了,无法粘贴到这里)并且最初的程序员选择让他们的几乎每个 class 扩展这个巨大的 class 充满了静态方法和常量,但我不知道他们的推理。

例如:

public class BaseClass{
     /* this class has a huge amount of ONLY static methods/constants */

     public static final int STUFF_DONE = 1;

     public static String getStuff(){
           String stuff = "this is my stuff.";
           return stuff;
     }
     ...
}

public class SuperClass extends BaseClass{
     /* this class has only a few methods */
     public String labelStuff(){
          return getStuff();
     }
}

public class MyClass extends SuperClass{
     /* there are many classes that extend SuperClass like this one */
     public int handleStuff(){
          String myString = labelStuff();
          return STUFF_DONE;
     }
     public static void main(){
          if(handleStuff()) System.out.println("Done.");
     }
}

我的问题是...是保留这种设计更好还是删除静态 methods/constants 的继承并简单地静态调用那些 methods/constants 更好?

"Better" 对我来说被定义为较低的内存消耗(同样,这个基础 class 相当大)因为 CPU 可能不受此影响。这种方法的benefits/pitfalls是什么?

我担心的是,因为 BaseClass 是如此之大,以至于我在继承 classes 中只使用一两个 methods/constants 浪费了很多内存,我可以调用静态的。

静态成员本身不是 "inherited"。他们住在基地 class 上,不管他们从哪个子 class 被调用,所以我怀疑是否有任何记忆影响。

将所有 class 对象创建为该通用 class 的子 class 的原因只是为了方便地访问没有限定 class 名称的静态成员。一个常见的变体是从声明一堆静态字段的接口继承。好处是实现一个接口不会像 superclass 那样干扰继承(你只能扩展一个 superclass)。缺点是 Java 8 之前无法在接口上声明静态方法。

无论如何,这个技巧通常被认为是一种反模式,并已被 static imports 取代。

继承是为子 class 定制父 class 的行为。

静态方法不能被继承,它们的行为不会因对象的状态而改变。

所以你不能让一些东西是静态的和可继承的。扩展 class 的完整静态方法是没有意义的。此外,这不会改变内存使用的大小。您的 classes 已经加载。

上面有会员写的漂亮见解。如果有助于理解,我想换个说法。

继承: 父classes的所有成员变量和函数都包含在子class中,基于可见性运算符(public, private , protected )

静态成员: class 的静态成员存储在 class 的所有实例变量都可以访问的内存中。这就像属于那个 class

的所有实例变量的共享空间

现在谈到静态变量和函数的继承,总是建议使用静态导入。