Java 物件導向三大特徵之一: 多態,三大多態

來源:互聯網
上載者:User

Java 物件導向三大特徵之一: 多態,三大多態

多態與類型轉換


子類重寫父類方法
 1)位置:子類和父類中有同名的方法
 2)方法名相同,傳回型別和修飾符相同,參數列表相同
       方法體不同


多態的優勢和應用場合
 多態:同一個參考型別,使用不同的執行個體而執行不同的操作
 
 實現多態的兩種形式
 1.使用父類作為方法形參實現多態
 2.使用父類作為方法傳回值實現多態

  形式1.1:父類做形參
     子類做實參
  形式1.2:父類做類型
        子類執行個體化
     (資料類型中的自動類型轉換)
  形式2.1:父類作為方法的傳回值
 子類執行個體化,類型自動轉換

 生活中的多態:
    印表機
  結論: 
 同一事物,由於條件不同,產生的結果也不同

 多態實現思路:
  編寫父類
  編寫子類,子類重寫父類方法
  運行時,使用父類的類型,子類的對象(自動類型轉換)

 優勢:
   ■多態可以減少類中代碼量
   ·可以提高代碼的可擴充性和可維護性
   ■向上轉型一子類轉換為父類,
   ·自動進行類型轉換
   ■向下轉型一父類轉換為子類,
   ·結合instanceof運算子進行強制類型轉換

 

栗子:

/** *  */package bdqn.javademos;/** *  * @author: 房上的貓 *  * @time: 下午3:51:59 *  * 部落格地址: https://www.cnblogs.com/lsy131479/ * *//** * @author xjz *父類 寵物類 */public class Pet {   public void eat(){       System.out.println("pet正在吃");   }}
父類
/** *  */package bdqn.javademos;/** *  * @author: 房上的貓 *  * @time: 下午3:51:59 *  * 部落格地址: https://www.cnblogs.com/lsy131479/ * *//** * @author xjz * */public class Cat extends Pet {    public void eat(){        System.out.println("貓吃貓糧");    }        public void ball(){        System.out.println("貓玩球");    }}
Cat類
/** *  */package bdqn.javademos;/** * @author xjz *子類:狗狗類 */public class Dog extends Pet{  public void eat(){      System.out.println("狗狗吃狗糧");  }    public void catchFlyDisk(){      System.out.println("狗狗玩飛盤");  }}
Dog類
/** *  */package bdqn.javademos;/** * @author xjz *企鵝類 */public class Penguin  extends Pet{   public void eat(){       System.out.println("企鵝吃魚");   }      public void swiming(){       System.out.println("企鵝遊泳");   }}
Penguin 類
/** *  */package bdqn.javademos;/** * @author xjz *主人類  */public class Master {           public void feed(Pet pet){           pet.eat();       }         //領養寵物 多態形式3:父類作為方法傳回值,子類執行個體化  類型自動轉換       public Pet getPet(int typeid){           Pet pet=null;           if(typeid==1){                pet=new Dog();           }           else if(typeid==2){                pet=new Penguin();           }           else if(typeid==3)           {                pet=new Cat();           }           return pet;       }      }
Master 類
package bdqn.javademos;import java.util.Scanner;public class Test {    /**     * @param args     */    public static void main(String[] args) {        //多態的形式1        Dog dog=new Dog();                Penguin peng=new Penguin();                Cat cat=new Cat();        Master ms=new Master();        ms.feed(dog);        ms.feed(peng);        ms.feed(cat);                //多態的形式2:父類做類型,子類執行個體化        Pet pet=new Dog();//自動轉換        pet.eat();                //調用領養寵物 形式3:父類作為方法的傳回型別        System.out.println("請選擇您要領養的寵物:(1-狗狗 2-企鵝  3-貓) ");        Scanner input=new Scanner(System.in);        int xz=input.nextInt();        Master dx=new Master();        Pet pets=dx.getPet(xz);         pets.eat();                    }}

 

 

instanceof運算子的使用

 類型轉換比較
     1.
   子類轉換父類
   向上轉型
   自動轉換
     2.
   父類轉換子類
   向下轉型
   使用isntanceof用作比較判定
   子類 對象名 = (子類)父類;
   使用子類對象

 

栗子:

/** *  */package bdqn.javademos;/** * @author xjz *父類 寵物類 */public class Pet {   public void eat(){       System.out.println("pet正在吃");   }}
父類

 

/** *  */package bdqn.javademos;/** * @author xjz * */public class Cat extends Pet {    public void eat(){        System.out.println("貓吃貓糧");    }        public void ball(){        System.out.println("貓玩球");    }}
Cat 類
/** *  */package bdqn.javademos;/** * @author xjz *子類:狗狗類 */public class Dog extends Pet{  public void eat(){      System.out.println("狗狗吃狗糧");  }    public void catchFlyDisk(){      System.out.println("狗狗玩飛盤");  }}
Dog 類
/** *  */package bdqn.javademos;/** * @author xjz *企鵝類 */public class Penguin  extends Pet{   public void eat(){       System.out.println("企鵝吃魚");   }      public void swiming(){       System.out.println("企鵝遊泳");   }}
Penguin 類
/** *  */package bdqn.javademos;/** * @author xjz *主人類  */public class Master {           public void feed(Pet pet){           pet.eat();       }         //領養寵物 多態形式3:父類作為方法傳回值,子類執行個體化  類型自動轉換       public Pet getPet(int typeid){           Pet pet=null;           if(typeid==1){                pet=new Dog();           }           else if(typeid==2){                pet=new Penguin();           }           else if(typeid==3)           {                pet=new Cat();           }           return pet;       }   //主人和寵物玩耍的行為       public void play(Pet pet){           if (pet instanceof Dog) {                Dog dog=(Dog)pet;//向下轉型                dog.catchFlyDisk();        }else if(pet instanceof Penguin){              Penguin peng=(Penguin)pet;              peng.swiming();        }else  if(pet instanceof Cat){            Cat cat=(Cat)pet;            cat.ball();        }                                        }   }
Master 類
package bdqn.javademos;import java.util.Scanner;public class Test {    /**     * @param args     */    public static void main(String[] args) {        //多態的形式1        Dog dog=new Dog();                Penguin peng=new Penguin();                Cat cat=new Cat();        Master ms=new Master();        ms.feed(dog);        ms.feed(peng);        ms.feed(cat);                //多態的形式2:父類做類型,子類執行個體化        Pet pet=new Dog();//自動轉換        pet.eat();                //調用領養寵物 形式3:父類作為方法的傳回型別        System.out.println("請選擇您要領養的寵物:(1-狗狗 2-企鵝  3-貓) ");        Scanner input=new Scanner(System.in);        int xz=input.nextInt();        Master dx=new Master();        Pet pets=dx.getPet(xz);         pets.eat();                dx.play(dog);    }}
測試類別

 

 

(C) 房上的貓 。 著作權所有,並保留一切權利。
 https://www.cnblogs.com/lsy131479/

如需轉載,請註明出處!!!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.