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

时间:2015-01-15 21:59:08

标签: java inheritance static

我有一个基类

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");
    }
}

现在有一个主类

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

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

2 个答案:

答案 0 :(得分:5)

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

FirstStatic.send()只会调用BaseStatic的{​​{1}},因为send没有静态FirstStatic方法。但是,send的{​​{1}}将始终致电BaseStatic的{​​{1}},除非您明确致电send

答案 1 :(得分:0)

这里注释掉的sendTo()方法会在基类中隐藏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(){
    //    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