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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

多态,面向对象

發布時間:2023/12/10 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多态,面向对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


/**
?*? 里氏替換原則 :
?*????? 能使用父類的地方,一定可以使用子類
?*? 什么是多態 :
?*????????? 父類的引用,指向子類的對象
?*? 多態的前提條件 :
?*????????? 有繼承關系的兩個類
?*? 多態的目的 :
?*??????? ☆☆☆? 代碼的重用
?*? 多態發什么在什么時候 :
?*????????? 賦值的時候
?* ?
?* !!!!!!!!! 多態中的 ☆☆☆? 覆寫 是特指的 成員方法!!!!!!!!!
?*? 什么是覆寫 :
?*????????? 就是在子類有個和父類相同的方法 : 方法名 , 參數列表 , 返回值類型 (和修飾符列表沒關系)
?*????????????? 1 方法名相同 : 不相同,就是兩個不一樣的方法了? 不是覆寫
?*????????????? 2 參數列表相同 : 參數列表不同,就是方法的重載了,也不是覆寫
?*?????????????????????????????? 參數列表的 個數 和 數據類型 都相同 才叫相同吧
?*????????????? 3 返回值類型相同 ; 返回值代表函數(方法)的功能,覆寫是為了功能更強大,不能降低功能,所以必須相同
?*????????? 覆寫之后 不能比原有的方法有更低的訪問權限 ( 權限的降低 就意味著 功能的降低 )
?*????????? 覆寫之后 不能比原有的方法有更寬泛的異常 ( 只能異常越來越低 )
?*
?*!!!!! ☆☆☆ 父類的屬性列表是在編譯的時候就生成了 : 就是javac的時候☆☆☆
?*!!!!! ☆☆☆ 子類的屬性列表是在運行時才生成 : 就是java運行的時候☆☆☆
?*
?*? 父類和子類的調用有兩種形式 :
?*???????? 1 多態 父類引用指向子類的對象? 父類型 變量名 = new 子類構造方法();
?*????????????? 靜態變量,靜態方法,成員變量 :
?*???????????????????????????????????????? 當這樣用引用變量名去調用方法或者變量時 , 先去父類找,如果有這個變量(方法).就會直接執行,不會再去子類中找,如果父類沒有這個變量(方法),直接報錯( 錯誤 : 找不到符號 ),不會去子類中找,因為現在子類的屬性列表還沒有,現在是編譯期報錯,所以沒法去子類找
?*????????????? 成員方法 :
?*?????????????????????? 當調用成員方法的時候,先去父類中找,父類如果有,再去子類中找,如果子類覆寫了成員方法,就執行子類的成員方法,如果子類沒有覆寫,就還執行父類的,但是如果父類沒有的成員方法,但是子類有,直接報錯( 錯誤 : 找不到符號 ),不會去子類找(不會執行子類特有的成員方法),因為子類現在還沒有屬性列表,現在只是在編譯期報錯.
?*????????? 2 直接實例化? 子類型 變量名 = new 子類構造方法();
?*????????????? 靜態變量,靜態方法,成員變量 :
?*???????????????????????????????????????? 先去子類找,如果子類有這個變量(方法),就執行,不會再去父類找,如果子類沒有這個變量(方法),就會去父類找,執行父類,但是如果子類和父類都沒有,就報錯( 錯誤 : 找不到符號 )
?*????????????? 成員方法 :
?*?????????????????????? 如果子類有,父類也有,就按子類的執行,那是方法的覆寫? ,如果子類沒有,就去父類找,執行父類的,如果子類有,父類沒有,就執行子類的(用于執行子類特有的方法,是父類沒有的),如果都沒有,就報錯( 錯誤 : 找不到符號 )
?*
?*/

下面是代碼 :


public class Duo_Tai{
??? public static void main(String[] args){
??????? //第一種 多態 父類引用 指向子類的對象
??????? Fu_Lei f = new Zi_Lei();

???????? //--------------------變量------------------------------

??????????? //父類有的 子類沒有的 靜態變量
??????????? int i = f.i;
??????????? System.out.println( i ); // 輸出100? 是 父類的 靜態變量

??????????? //父類有的 子類也有的 靜態變量
??????????? int a = f.a; //這里的兩個變量 不會沖突 因為前面那個int a 是局部變量? 后面那個f.a 是類中的靜態變量
??????????? System.out.println( a ); //輸出1? 是 父類的 靜態變量 為什么輸出的不是子類的 111

??????????? //父類有的 子類沒有的 成員變量
??????????? int j = f.j;
??????????? System.out.println( j );//輸出200 是 父類的 成員變量

??????????? //父類有的 子類也有的 成員變量
??????????? int b = f.b;
??????????? System.out.println( b );//輸出2 是 父類的 成員變量 為什么輸出的不是子類的 2222
??????????? /*
??????????? //父類沒有 子類有的 靜態變量? 為什么?為什么不去調用子類的?
?????????? int m = f.m;? //Duo_Tai.java:48: 錯誤: 找不到符號
??????????? System.out.println( m );

??????????? //父類沒有 子類有的 成員變量? 為什么?為什么不去調用子類的?
??????????? int n = f.n;? //Duo_Tai.java:52: 錯誤: 找不到符號
??????????? System.out.println( n );
??????????? */
??????? //--------------------方法------------------------------

??????????? //父類有的 子類沒有的 靜態方法
??????????????? f.m6();? //輸出 父類的 靜態方法

??????????? //父類有的 子類也有的 靜態方法
??????????????? f.m3();? //輸出 父類的 靜態方法

??????????? //父類有的 子類沒有的 成員方法
??????????????? f.m2();? //輸出 父類的 成員方法

??????????? //父類有的 子類也有的 成員方法
??????????????? f.m1();? //輸出 父類的 成員方法
??????????? /*
??????????? //父類沒有 子類有的 靜態方法?? 為什么報錯?為什么不去調用子類的?
??????????????? f.m5();? //Duo_Tai.java:68: 錯誤: 找不到符號

??????????? //父類沒有 子類有的 成員方法?? 為什么報錯?為什么不去調用子類的?
??????????????? f.m4();? //Duo_Tai.java:71: 錯誤: 找不到符號
??????????? */
//----------------------------------------------------------------------????????? ?

??????? //第二種 直接實例化多態 子類引用 是子類的對象
??????? Zi_Lei z = new Zi_Lei();

???????? //--------------------變量------------------------------

??????????? //父類有的 子類沒有的 靜態變量
??????????????? int i1 = z.i;? // 輸出 父類 的 靜態變量
??????????????? System.out.println( i1 ); // 為什么子類沒有 不會報錯?而是去調用父類的

??????????? //父類有的 子類也有的 靜態變量
??????????????? int a1 = z.a;? // 輸出 子類 的 靜態變量
??????????????? System.out.println( a1 );

??????????? //父類有的 子類沒有的 成員變量
??????????????? int j1 = z.j;? // 輸出 父類 的 成員變量
??????????????? System.out.println( j1 );

??????????? //父類有的 子類也有的 成員變量
??????????????? int b1 = z.b;? // 輸出 子類 的 成員變量
??????????????? System.out.println( b1 );
??????????? //父類沒有 子類有的 靜態變量
??????????????? int m1 = z.m;? // 輸出 子類 的 靜態變量
??????????????? System.out.println( m1 ); //為什么父類沒有 不會報錯?

??????????? //父類沒有 子類有的 成員變量
??????????????? int n1 = z.n;? // 輸出 子類 的 成員變量
??????????????? System.out.println( n1 );

??????? //--------------------方法------------------------------

??????????? //父類有的 子類沒有的 靜態方法
??????????????? z.m6();? //輸出 父類的 靜態方法 為什么沒有報錯?而且去調用父類的了靜態方法

??????????? //父類有的 子類也有的 靜態方法
??????????????? z.m3();? //輸出 子類的 靜態方法

??????????? //父類有的 子類沒有的 成員方法
??????????????? z.m2();? // 輸出 父類的 成員方法 為什么沒有報錯?而且去調用父類的成員方法

??????????? //父類有的 子類也有的 成員方法
??????????????? z.m1();? //輸出 子類的 成員方法 為什么?!!!!☆☆☆

??????????? //父類沒有 子類有的 靜態方法
??????????????? z.m5();? //輸出 子類的 靜態方法

??????????? //父類沒有 子類有的 成員方法
??????????????? z.m4();? //輸出 子類的 成員方法
??? }
}
class Fu_Lei{//聲明一個父類
??? static int i = 100;//靜態變量 父類的 子類沒有的

??? static int a = 1;//靜態變量 子類也有的

??? int j = 200;//成員變量 父類的 子類沒有的

??? int b = 2;//父類的 子類也有的

??? public void m1(){//被覆寫的成員變量(子類有的)
??????? System.out.println( "我是父類的成員方法," );
??? }
??? public void m2(){//沒有被覆寫的成員變量 (子類沒有的)
??????? System.out.println( "我是父類的成員方法,沒有被覆寫的" );
??? }
??? public static void m3(){//靜態方法 子類也有
??????? System.out.println( "我是父類的靜態變量" );
??? }
??? public static void m6(){//子類沒有的靜態方法
??????? System.out.println( "子類沒有的靜態方法" );
??? }
}

class Zi_Lei extends Fu_Lei{//聲明一個子類? 繼承( extends )父類

??? static int m = 3;//父類沒有的靜態變量

??? int n = 8;//父類沒有的成員變量

??? static int a = 111;//父類也有的

??? int b = 2222;//父類也有的

??? public void m1(){//父類有的成員方法
???????? System.out.println( "我是子類,我覆寫了父類的m1()成員方法" );
??? }
??? public void m4(){//父類沒有的成員方法
???????? System.out.println( "我是子類,我這個方法,父類沒有,是我自己的" );
??? }
??? public static void m3(){//父類有的靜態方法
???????? System.out.println( "我是子類的靜態方法,父類也有哦" );
??? }
??? public static void m5(){//父類沒有的靜態方法
???????? System.out.println( "我是子類的靜態方法 , 父類沒有," );
??? }
}

轉載于:https://www.cnblogs.com/xrmqbl/p/4735126.html

總結

以上是生活随笔為你收集整理的多态,面向对象的全部內容,希望文章能夠幫你解決所遇到的問題。

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