我有一个基类
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方法
答案 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