關於java靜態方法繼承問題


  1. 結論:java中靜態屬性和靜態方法可以被繼承,但是沒有被重寫(overwrite)而是被隱藏.  
  2. 原因:  
  3. 1). 靜態方法和屬性是屬於類的,調用的時候直接通過類名.方法名完成對,不需要繼承機制及可以調用。如果子類里面定義了靜態方法和屬性,那么這時候父類的靜態方法或屬性稱之為"隱藏"。如果你想要調用父類的靜態方法和屬性,直接通過父類名.方法或變量名完成,至於是否繼承一說,子類是有繼承靜態方法和屬性,但是跟實例方法和屬性不太一樣,存在"隱藏"的這種情況。  
  4. 2). 多態之所以能夠實現依賴於繼承、接口和重寫、重載(繼承和重寫最為關鍵)。有了繼承和重寫就可以實現父類的引用指向不同子類的對象。重寫的功能是:"重寫"后子類的優先級要高於父類的優先級,但是“隱藏”是沒有這個優先級之分的。  
  5. 3). 靜態屬性、靜態方法和非靜態的屬性都可以被繼承和隱藏而不能被重寫,因此不能實現多態,不能實現父類的引用可以指向不同子類的對象。非靜態方法可以被繼承和重寫,因此可以實現多態。  
 1 package com.wyy.test;
 2 
 3 public class StaticMethodTest {
 4     public static void main(String[] args){
 5         Parent p = new Parent();
 6         Parent son = new Son();
 7         p.getName();
 8         son.getName();
 9         p.getDesc();
10         son.getDesc();
11     }
12 }
13 class Parent{
14     public static String name ;
15     public String desc;
16     public static void getName(){
17         name = "father";
18         System.out.println(name);
19     }
20     public void getDesc(){
21         desc = "father's Desc";
22         System.out.println(desc);
23     }
24 }
25 
26 class Son extends Parent{
27     public static void getName(){
28         name = "son";
29         System.out.println(name);
30     }
31     public void getDesc(){
32         desc = "son's Desc";
33         System.out.println(desc);
34     }
35 }

輸出結果為:

father
father
father's Desc
son's Desc

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM