靜態方法可以重載但是不可以重寫

來源:互聯網
上載者:User

 

重載例子

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.