如何从 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()
将调用 BaseStatic
的 send
只是因为 FirstStatic
没有静态 send
方法。但是,BaseStatic
的 send
将始终调用 BaseStatic
的 sendTo
,除非您明确调用 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
我有一个基地 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()
将调用 BaseStatic
的 send
只是因为 FirstStatic
没有静态 send
方法。但是,BaseStatic
的 send
将始终调用 BaseStatic
的 sendTo
,除非您明确调用 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