日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

155个建议笔记--建议33:不要覆写静态方法

發布時間:2023/12/9 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 155个建议笔记--建议33:不要覆写静态方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們知道在JAVA中可以通過overRide來增強或減弱父類的方法和行為,但覆寫是針對非靜態方法的,不能針對靜態方法(也叫類方法),為什么呢?看一下下面的例子:

View Code public class OverRideTepublic static void main(String[] args){ Father father=new Son(); father.print1(); father.print2(); } } class Father{ public static void print1(){ System.out.println("我是父類靜態方法"); } public void print2(){ System.out.println("我是父類非靜態方法"); } } class Son extends Father{ public static void print1(){ System.out.println("我是子類靜態方法"); } public void print2(){ System.out.println("我是子類非靜態方法"); } }1 public class OverRideTest {2 3 public static void main(String[] args){4 Father father=new Son();5 father.print1();6 father.print2();7 }8 9 } 10 class Father{ 11 public static void print1(){ 12 System.out.println("我是父類靜態方法"); 13 } 14 public void print2(){ 15 System.out.println("我是父類非靜態方法"); 16 } 17 } 18 class Son extends Father{ 19 public static void print1(){ 20 System.out.println("我是子類靜態方法"); 21 } 22 23 public void print2(){ 24 System.out.println("我是子類非靜態方法"); 25 } 26 }

看程序子類son覆寫了父類father中的print1(),print2()方法,按道理來說應該都是執行覆寫后的方法,然而

運行之后結果:

我是父類靜態方法
我是子類非靜態方法

分析原因:

son的兩個覆寫區別僅僅在是否有static,每個實例對象都有兩個類型,一個是表面類型,一個是實際類型,表面類型是在聲明時得到的,實際類型是對象產生時的類型,例子中,Father是表面類型,Son是實際類型,對于非靜態方法而言,是根據對象的實際類型來執行;而對于靜態方法則比較特別,首先靜態方法不依賴于實例對象,通過類名來訪問,其次,可以通過對象訪問靜態方法,如果是通過對象訪問,JVM是通過對象的表面類型來找到靜態方法的入口,因而執行Father中的靜態方法。

?

轉載于:https://www.cnblogs.com/yuwenfeng/archive/2013/05/09/3069152.html

總結

以上是生活随笔為你收集整理的155个建议笔记--建议33:不要覆写静态方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。