调用

时间:2015-08-20 01:47:27

标签: java inheritance methods static call

这有点奇怪,可能会发出不同的语法,但请跟我说。我已经尝试了三个月,我确信我需要一种方法来做到这一点:

public abstract class Sup{
    ...
    //This is implemented here because I cannot create an abstract static
    //only implemented by the children but called statically by methods in
    //the parent (more info later on in the post):
    protected static Class<? extends Sup> getTypeClass(){ return Sup.class };
    public static void init(){
        ...
        alreadyDeclaredHashMap.put(getTypeClass(), hashMapOfOtherStuff);
    }
}

public class A extends Sup{
    static{
        init();
    }
    protected static void getTypeClass(){ return A.class };
}
public class B extends Sup{
    static{
        init();
    }
    protected static void getTypeClass(){ return B.class };
}
... and so on.

因此,如果我要打印出alreadyDeclaredHashMap,它就会像:

    class A -> hashMapOfOtherStuff
    class B -> hashMapOfOtherStuff
    class C -> hashMapOfOtherStuff
    ...

但相反它打印:

    class Sup -> hashMapOfOtherStuff
    class Sup -> hashMapOfOtherStuff
    class Sup -> hashMapOfOtherStuff
    ...

因为扩展类隐藏getTypeClass()但不能覆盖它。这只是一个例子。实际上,我正在建立一个单位系统,我有很多方法,具体取决于getTypeClass() 真的 喜欢不必在每次扩展中重写它们class(其中有一个不确定的数字),实现的唯一区别是类名。

非常感谢!

P.S。这些方法 do 必须是静态的,因为它们是静态调用的(我宁愿不必创建一个虚拟实例或反射来调用它们。)

1 个答案:

答案 0 :(得分:0)

没有办法让它发挥作用。类editText中的静态代码不了解类sup和类A,即使从其中一个方法调用B方法也是如此。

静态方法不是“virtual”,因此从init中的静态代码调用getTypeClass()将调用该实现,而不是任何子类实现。

现在,如果您希望重用Supinit中的A方法,则必须将其作为参数传递。

B