如何从 parent 的静态方法调用 child 的静态方法?

How can i call child's static method from parent's static method?

我有一个基地 class

public class BaseStatic {
    public static String fname = "Base";
    public static String lname = "Static";

    public static void send(){
        System.out.println("BaseStatic send");
        sendTo();
    }

    public static void sendTo(){
        //How to call from here Child's static method.
        System.out.println("BaseStatic sendTo");
    }
}

我有一个 Child Class 来扩展它。

public class FirstStatic extends BaseStatic {
    public static String fname = "First";
    public static String lname = "Static";

    public static void sendTo(){
        System.out.println("FirstStatic sendTo");
    }
}

现在有一个 Main class

public class Main {
    public static void main(String args[]){
        FirstStatic.send();
    }
}

java 是否为我提供了一种方法,以便当我从 Main 方法 FirstStatic.send 调用时,它转到 BaseStatic 的发送方法,从那里我可以调用 FirstStatic 的 sendTo 方法而不是调用 sendTo BaseStatic

方法

静态方法没有多态性。因此,为了调用classA的静态方法x,必须写成A.x().

FirstStatic.send() 将调用 BaseStaticsend 只是因为 FirstStatic 没有静态 send 方法。但是,BaseStaticsend 将始终调用 BaseStaticsendTo,除非您明确调用 FirstStatic.sendTo().

此处注释掉的 sendTo() 方法会产生隐藏 sendTo() 实现的效果 class。

public class BaseStatic {
    public static String fname = "Base";
    public static String lname = "Static";

    public static void send(){
        System.out.println("BaseStatic send");
        sendTo();
    }

    public static void sendTo(){
        //How to call from here Child's static method.
        System.out.println("BaseStatic sendTo");
    }

    public static void main(String[] args) {
        FirstStatic.sendTo();
    }
}

class FirstStatic extends BaseStatic {
    public static String fname = "First";
    public static String lname = "Static";

    //public static void sendTo(){
    //    System.out.println("FirstStatic sendTo");
    //}
}

您当然可以执行以下操作,但最终效果与上面显示的代码相同。如果您需要多态性,则需要取消静态 — 无论如何,这可能是个好主意!

public class BaseStatic {
    public static String fname = "Base";
    public static String lname = "Static";

    public static void send(){
        System.out.println("BaseStatic send");
        sendTo();
    }

    public static void sendTo(){
        //How to call from here Child's static method.
        System.out.println("BaseStatic sendTo");
    }

    public static void main(String[] args) {
        FirstStatic.sendTo();
    }
}

class FirstStatic extends BaseStatic {
    public static String fname = "First";
    public static String lname = "Static";

    public static void sendTo(){
        BaseStatic.sendTo();
    }
}

编辑:这些示例的结构使您可以轻松地执行以下操作来验证行为。

javac BaseStatic.java
java BaseStatic