您的位置:首页 > 其它

静态方法可以重载但是不可以重写

2009-07-06 14:32 274 查看
重载例子

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐