重载例子
public class Test {
public static void test(){
System.out.println("hello");
}
public static void test(String s){
System.out.println(s);
}
public static void main(String args[]){
Test.test();
Test.test("nihao");
}
}
结果打印:
hello
nihao
重写例子
public class Test {
public static void test(){
System.out.println("hello");
}
public static void test(String s){
System.out.println(s);
}
class subClass extends Test{
public static void test(){
}
}
public static void main(String args[]){
Test.test();
Test.test("nihao");
}
}
发生错误。
将子类声明为静态静态类静态方法就可以重写了
public class Test {
public static void test(){
System.out.println("hello");
}
public static void test(String s){
System.out.println(s);
}
static class subClass extends Test{
public static void test(){
System.out.println("wrong");
}
}
public static void main(String args[]){
Test.test();
Test.test("nihao");
subClass.test();
}
}
结果打印:
hello
nihao
wrong
静态 方法的 重载 |
|
在类的继承中会经常遇到方法重载 的问题, 而静态 方法的重载 又和普通的方法重载 不同,不过在一般的编程中遇到静态 方法重载 的情况很少。 在编译时,编译器就会根据引用的类来匹配调用的静态 方法,因此就不会在运行时再来匹配相应具体的类中的静态 方法。 举例来说,当声明一个超类的变量调用静态 方法时,就算它在运行时是指向子类的引用,它调用的是超类的静态 方法,而不会根据引用的不同而调用相应子类的静态 方法。 用下面的例子进一步说明这个问题: public class Override { ?? static class Parent { ????????? static void staticMethod() { ????????????????? System.out.println("Parent Static Method"); ????????? } ????????? void instanceMethod() { ????????????????? System.out.println("Parent Instance Method"); ????????? } ?? } ?? static class Child extends Parent { ????????? static void staticMethod() { ????????????????? System.out.println("Child Static Method"); ????????? } ????????? void instanceMethod() { ????????????????? System.out.println("Child Instance Method"); ????????? } ?? } ?? public static void main(String args[]) { ????????? Parent p1 = new Parent(); ????????? Parent p2 = new Child(); ????????? Child c = new Child(); ????????? System.out.print("Parent.static: "); Parent.staticMethod(); ????????? System.out.print("p1.static: "); p1.staticMethod(); ????????? System.out.print("p2.static: "); p2.staticMethod(); ????????? System.out.print("p1.instance: "); p1.instanceMethod(); ????????? System.out.print("p2.instance: "); p2.instanceMethod(); ????????? System.out.print("Child.static: "); Child.staticMethod(); ????????? System.out.print("c.static: "); c.staticMethod(); ????????? System.out.print("c.instance: "); c.instanceMethod(); ?? } } 相关文章链接 http://java.sun.com/developer/onlineTraining/new2java/supplements/solutions/June03.html |