<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ### 概念 多態是繼封裝(安全性)、繼承(復用)之后,面向對象的第三大特性。 1. 現實事物經常會體現出多種形態,如學生,學生是人的一種,則一個具體的同學張三既是學生也是人,即出現兩種形態。 2. Java作為面向對象的語言,同樣可以描述一個事物的多種形態。如Student類繼承了Person類,一個Student的對象便既是Student,又是Person。 3. Java中多態的代碼體現在一個子類對象(實現類對象)既可以給這個子類(實現類對象)引用變量賦值,又可以給這個子類(實現類對象)的父類(接口)變量賦值。 4. 如Student類可以為Person類的子類。那么一個Student對象既可以賦值給一個Student類型的引用,也可以賦值給一個Person類型的引用。 5. 最終多態體現為父類引用變量可以指向子類對象。 6. 多態的前提是必須有子父類關系或者類實現接口關系,否則無法完成多態。 7. 在使用多態后的父類引用變量調用方法時,會調用子類重寫后的方法。 8. 多態是指對象的多態(不是類),是指一個對象的多種狀態. ## 多態的前提 1. 必須有費子類關系. 2. 必須有方法被重寫. 語法 : ~~~ 父類或接口類型 變量名 = new 子類(); //接口,抽象類和普通類都可以實現多態性 ~~~ **成員變量** 1. 編譯的時候,參考父類中有沒有這個變量,如果有,編譯成功. 如果沒有則編譯失敗 . 2. 如果編譯成功,運行的時候,運行的是父類的變量值 . 3. 結論 : 編譯運行全看父類 . 父類 ~~~ public class Parent { public int x = 10; } ~~~ 子類 ~~~ public class Son extends Parent { public int x = 20; } ~~~ 調用 ~~~ public class Main { public static void main(String[] args) { Parent s = new Son(); System.out.print(s.x); } } ~~~ 結果 ~~~ 10 ~~~ **成員方法** 1. 編譯的時候,參考父類中有沒有這個方法,如果有,編譯成功; 如果沒有則編譯失敗 . 2. 運行的時候,運行的是子類的重寫方法 . 3. 結論 : 編譯看父類, 運行看子類(**如果是靜態方法,那么都是看父類 . 因為靜態是屬于類的,跟對象沒有關系**) . 父類方法 ~~~ public class Parent { public void show() { System.out.print("父類方法"); } } ~~~ 子類方法 ~~~ public class Son extends Parent { public void show() { System.out.print("子類方法"); } } ~~~ 調用 ~~~ public class Main { public static void main(String[] args) { Parent s = new Son(); s.show(); } } ~~~ 結果 ~~~ 子類方法 ~~~ ## 多態的弊端 1. 只能調用子父類共有的方法,不能調用子類特有的方法,編譯不能通過. ## 多態的優點 1. 提高了程序的靈活性. ## 總結 1. 父類類型變量,可以接收任何 一個子類類型的對象. 2. 調用方法的時候,編譯時看父類,運行時看子類. ### instanceof 運算符 ~~~ 實例對象 instanceof 類名; //結果是布爾值 ~~~ ## 實例 ~~~ public abstract class AbstractAnimal { public abstract void eat(); } ~~~ ~~~ public class Cat extends AbstractAnimal { @Override public void eat() { System.out.println("貓吃飯"); } } ~~~ ~~~ public class Dog extends AbstractAnimal { @Override public void eat() { System.out.println("狗吃飯"); } } ~~~ 調用 ~~~ public class Test { public static void main(String[] args) { Dog d = new Dog(); feed(d); Cat c = new Cat(); feed(c); } public static void feed(AbstractAnimal a) { a.eat(); } } ~~~ ### 向上轉型 ~~~ Parent p = new Son() ~~~ **詳解** 1. 因為java強制規定,參與運算的數據類型必須一致, 但是在這里賦值號兩方類型明顯不一致 , 為什么能編譯成功呢 ? 因為java對Son() 進行了向上類型轉換 . 將Son 的類型轉換成Parent 了 . 2. 這個時候p所指向的引用數據類型無法調用Son類自己獨有的方法 , 只能調用對Parent類重寫的方法 . ### 向下轉型 轉型的作用是調用子類獨有向下的方法. ~~~ 子類 變量 = (子類)父類變量; ~~~ **詳解** 1. 如果非要使用子類獨有的方法,那么怎么辦呢 ? 只能向下轉型, 向下轉型必須進行強制轉換 . 2. 進行向下轉型之后就可以使用子類獨有的方法了. ## 向下轉型弊端 向下轉型編譯器不會報錯,運行的時候就報錯了. ~~~ AbstractAnimal dog = new Dog(); cat c = (Cat) dog; c.speak(); //貓沒有這個方法 ~~~ ## java解決向下轉型的弊端 使用instanceof 運算符.
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看