我想要拥有所有具有相同方法的类系列。由于这个方法非常简单,我想将其设为最终静态,例如
class A {
public static final String createSth () { }
}
Run Code Online (Sandbox Code Playgroud)
(事实上这个方法只返回String)。
有时,使用相同的方法对所有这些 A、B、C 类进行上转型会很有用。因此我想创建母亲班。
class abstract Mother {
public static abstract String createSth () { }
}
Run Code Online (Sandbox Code Playgroud)
然后为我的所有 A、B、C 类添加适当的扩展。A类扩展了Mother。
不幸的是,Java 不允许这样做。我想知道为什么?
当然,我可以删除 static Final 修饰符,然后一切正常。但另一方面,如果每个子类都返回不可以任何方式修改的常量 String,为什么不呢?
你可能会问这样的建设目的是什么?
只是我想创建数据库 sql 字符串。对于每个表,我创建了一个单独的类,并且作为 createSth 方法的结果,我想返回为此类创建表的 sql。
接口也没有帮助。
唯一的解决方案似乎是从 Mother 类的 createSth 方法中删除抽象修饰符。但是我不允许对 Mother 类进行上转型并为子类调用 createSth 方法。所以我必须删除子类的 static 修饰符。
总结为什么抽象方法不允许是静态的?好吧,我什至可以理解这一点,但是为什么不允许在子类中用静态方法替换非静态抽象方法呢?