在这个答案中有这个代码:
//in a main method somewhere
Super instance = new Sub();
instance.method();
//...
public class Super {
public static void method() {
System.out.println("Super");
}
}
public class Sub extends Super {
public static void method() {
System.out.println("Sub");
}
}
这按预期打印Super
,但我有一些代码在给定实例的地方,我想调用 static Sub.method()
。一种解决方案可能是:
public class Sub extends Super {
public static void sMethod() {
Super.sMethod();
System.out.println("Sub (static)");
}
public void method() {
super.method();
System.out.println("Sub (instance)");
}
}
然而,对于非平凡的函数体(在我的例子中,我正在检查一个参数是否在类允许的范围内)有很多重复的代码。有没有好的设计模式来解决这个问题?也许反射会起作用,但感觉像是最后的手段。
再想一想,这样更好吗?
public class Sub extends Super {
public static void sMethod() {
Super.sMethod();
System.out.println("Sub (static)");
}
public void method() {
Sub.sMethod();
}
}