Java中多態的理解
----------------------------------
最近在學習Java,接觸了
多態的概念,用了好久才
搞懂,來給大家分享一下
博主的想法;
----------------------------------
多態,就是指一個對象在
不同時候體現出來的不同
狀態;
----------------------------------
多態的實現要有3個前提:
1.要有繼承關系;
2.要有方法重寫;
3父類引用指向子類對象;
即 父 f = new 子();
----------------------------------
多態的成員訪問特點:
1.成員變量:
編譯看左邊,運行看左邊;
2.靜態成員變量:
覆蓋父類的值;
3.構造方法:
創建子類對象的時候,訪問父類的構造方法,對父類的數據初始化;
4.成員方法:
編譯看左邊,運行看右邊;(即父類和子類都有該方法,否則就報錯,運行時是調用用子類的方法)
5.靜態成員方法:
編譯看左邊,運行看左邊;
----------------------------------
總結:
只有重寫後才會使用子類
的方法;靜態方法與類有
關(通過類名加“.”訪問)
,算不上重寫,所以父類的
靜態方法不會被覆蓋;成
員變量和靜態成員變量不
存在重寫,所以不會被覆蓋;
所以只有成員方法才會調
用子類的方法。
----------------------------------
下面給出一個實例來說明:
1 public class DuoTai { 2 public static void main(String[] args) { 3 4 Fu f = new Zi();//fu,zi //這裏是多態 5 System.out.println(f.num); //100(fu的值) 6 System.out.println(f.a); //300(fu的值) 7 //System.out.println(f.b); //不能訪問子類獨有(父類沒有)的成員變量;ERROR 8 f.method(); //child //動態成員方法 9 f.fun(); //Fu //靜態成員方法 10 System.out.println(); 11 12 Zi z = new Zi();//fu,zi //這裏是普通的對象創建方法 13 System.out.println(z.num); //200(zi的值) 14 System.out.println(z.a); //400(zi的值) 15 System.out.println(z.zi); //500 16 z.method(); //child 17 z.fun(); //Zi 18 System.out.println(); 19 20 Fu m = new Fu();//zi //這裏是普通的對象創建方法 21 System.out.println(m.num); //100(fu的值) 22 System.out.println(m.a); //300(fu的值) 23 m.method(); //father 24 m.fun(); //Fu 25 } 26 } 27 class Fu{ 28 public int num = 100; //fu的成員變量 29 public static int a = 300; //fu的靜態成員變量 30 public Fu(){ //fu的構造方法 31 System.out.println("fu"); 32 } 33 public void method(){ //fu的成員方法 34 System.out.println("father"); 35 } 36 public static void fun(){ //fu的靜態成員方法 37 System.out.println("Fu"); 38 } 39 } 40 class Zi extends Fu{ 41 public int num = 200; //zi的成員變量 42 public static int a = 400; //zi的靜態成員變量 43 public int b = 500; //zi的成員變量(獨有的) 44 public Zi(){ //zi的構造方法 45 System.out.println("zi"); 46 } 47 public void method(){ //zi的成員方法 48 System.out.println("child"); 49 } 50 public static void fun(){ //zi的靜態成員方法 51 System.out.println("Zi"); 52 } 53 }
------------------------------
上面就是我對多態的理
解,如有錯誤,歡迎大
家指正;感謝閱讀;
------------------------------
Java中多態的理解