国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java從零開始學十六(多態)

2019-11-14 23:02:34
字體:
來源:轉載
供稿:網友
java從零開始學十六(多態)一、什么是多態多態性是指允許不同類的對象對同一消息作出響應.多態性包括參數化多態性和包含多態性.多態性語言具有靈活、抽象、行為共享、代碼共享的優勢,很好的解決了應用程序函數同名問題.多態有兩種表現形式:重載和覆蓋首先說重載(overload),是發生在同一類中.與什么父類子類、繼承毫無關系.標識一個函數除了函數名外,還有函數的參數(個數和類型).也就是說,一個類中可以有兩個或更多的函數,叫同一個名字而他們的參數不同.他們之間毫無關系,是不同的函數,只是可能他們的功能類似,所以才命名一樣,增加可讀性,僅此而已!再說覆蓋(override),是發生在子類中!也就是說必須有繼承的情況下才有覆蓋發生.我們知道繼承一個類,也就有了父類了全部方法,如果你感到哪個方法不爽,功能要變,那就把那個函數在子類中重新實現一遍.這樣再調用這個方法的時候,就是執行子類中的過程了.父類中的函數就被覆蓋了.(當然,覆蓋的時候函數名和參數要和父類中完全一樣,不然你的方法對父類中的方法就不起任何作用,因為兩者是兩個函數,毫不關系)二、簡單實現
package com.pb.demo6;public abstract class Pet {   PRivate String name;  //寵物名字   private String sex;    //寵物性別   private int health;        //寵物的健康值      //寵物看病的方法   abstract void toHospital();public String getName() {    return name;}public void setName(String name) {    this.name = name;}public String getSex() {    return sex;}public void setSex(String sex) {    this.sex = sex;}public int getHealth() {    return health;}public void setHealth(int health) {    this.health = health;}   }
package com.pb.demo6;/* * 小狗類 */public class Dog extends Pet {    @Override    void toHospital() {        //小狗看病的方法        System.out.println("小狗看病:打針、吃藥!");    }}package com.pb.demo6;/* * 小豬類 */public class Pig extends Pet {    @Override    void toHospital() {        System.out.println("小豬看病:打針、睡覺!");    }}package com.pb.demo6;/* * 小鳥類 */public class Bird extends Pet {    @Override    void toHospital() {        //小鳥看病的方法        System.out.println("小鳥看病:吃藥、休息!");    }}
package com.pb.demo6;/* * 寵物醫生類 */public class Doctor {        //醫生治療方法    public void cure(Pet pet){ //將寵物傳參                if(pet.getHealth()<50){ //判斷健康值小于50            //調用看病的方法            pet.toHospital();            //將健康值設置為60,健康            pet.setHealth(60);        }    }}

測試類

package com.pb.demo6;/* * 測試類 */public class Test {    public static void main(String[] args) {        //聲明醫生對象        Doctor dc=new Doctor();        //聲明寵物對象為小鳥       Pet brid=new Bird();       //調用醫生的治療方法       dc.cure(brid);     //聲明寵物對象為小狗       Pet dog=new Dog();     //調用醫生的治療方法       dc.cure(dog);     //聲明寵物對象為小豬       Pet pig=new Pig();     //調用醫生的治療方法       dc.cure(pig);           }}

結果:

小鳥看病:吃藥、休息!小狗看病:打針、吃藥!小豬看病:打針、睡覺!
三、對象的多態性對象的多態性主要分為以下兩種類型:向上轉型和向下轉型3.1對象向上轉型:父類 父類對象 = 子類實例 ;向上轉型:子類對象 ->父類對象對于向上轉型,程序會自動完成,格式:如上面的:
 //聲明寵物對象為小鳥       Pet brid=new Bird();//聲明寵物對象為小狗       Pet dog=new Dog(); //聲明寵物對象為小豬       Pet pig=new Pig();

編譯時類型為:Pet,而運行時類型為具體的類型

也就是說編譯時類型由聲明該變量時使用類型決定,而運行時類型由實際賦給該變量的對象決定

3.2 對象向下轉型:向下轉型:父類對象 ->子類對象對于向下轉型時,必須明確的指明要轉型的子類類型,格式:子類 子類對象 = (子類)父類實例 ;強制類型轉換上面的例中,子類沒有自己的方法,如果子類有自己的方法,醫生類中還能調用嗎?顯然不能,因為是向上轉為父類后,只能調用父類的方法,如果要調用子類的方法就需要用到向下轉型要用到instannceof四、instanceof 關鍵字在java中可以使用instanceof關鍵字判斷一個對象到底是那個類的實例對象 instanceof 類 ->返回boolean類型
package com.pb.demo6;public abstract class Pet {   private String name;  //寵物名字   private String sex;    //寵物性別   private int health;        //寵物的健康值      //寵物看病的方法   abstract void toHospital();public String getName() {    return name;}public void setName(String name) {    this.name = name;}public String getSex() {    return sex;}public void setSex(String sex) {    this.sex = sex;}public int getHealth() {    return health;}public void setHealth(int health) {    this.health = health;}   }
package com.pb.demo6;/* * 小鳥類 */public class Bird extends Pet {    @Override    void toHospital() {        //小鳥看病的方法        System.out.println("小鳥看病:吃藥、休息!");    }    public void fly(){        System.out.println("小鳥會飛!");    }}
package com.pb.demo6;/* * 小狗類 */public class Dog extends Pet {    @Override    void toHospital() {        //小狗看病的方法        System.out.println("小狗看病:打針、吃藥!");    }    public void run(){        System.out.println("小狗在地上跑!");    }    }
package com.pb.demo6;/* * 小豬類 */public class Pig extends Pet {    @Override    void toHospital() {        System.out.println("小豬看病:打針、睡覺!");    }  public void sleep(){      System.out.println("小豬要睡覺!");  }}
package com.pb.demo6;/* * 寵物醫生類 */public class Doctor {        //醫生治療方法    public void cure(Pet pet){ //將寵物傳參                if(pet.getHealth()<50){ //判斷健康值小于50            //調用看病的方法            pet.toHospital();            //將健康值設置為60,健康            pet.setHealth(60);            //判斷是寵物類型            if(pet instanceof Dog){                //向下轉型,強制類型轉制                Dog dog=(Dog)pet;                //調用小狗自己的方法                dog.run();            }else if(pet instanceof Bird){                //向下轉型,強制類型轉制                Bird bird=(Bird)pet;                //調用小鳥自己的方法                bird.fly();            }else if(pet instanceof Pig){                //向下轉型,強制類型轉制                Pig pig=(Pig)pet;                //調用小豬自己的方法                pig.sleep();            }        }    }}
package com.pb.demo6;/* * 測試類 */public class Test {    public static void main(String[] args) {        //聲明醫生對象        Doctor dc=new Doctor();        //聲明寵物對象為小鳥       Pet brid=new Bird();       //調用醫生的治療方法       dc.cure(brid);     //聲明寵物對象為小狗       Pet dog=new Dog();     //調用醫生的治療方法       dc.cure(dog);     //聲明寵物對象為小豬       Pet pig=new Pig();     //調用醫生的治療方法       dc.cure(pig);           }}

結果:

小鳥看病:吃藥、休息!小鳥會飛!小狗看病:打針、吃藥!小狗在地上跑!小豬看病:打針、睡覺!小豬要睡覺!
五、父類做為形參
package com.pb.demo2;/* * 商品類 */public class Goods {    //打印商品價格方法    public void printPrice(){        System.out.println("打印商品價格");    }}package com.pb.demo2;/* * 食品類 */public class Foods extends Goods {    @Override    public void printPrice() {        System.out.println("打印食品類的商品價格!");    }    }package com.pb.demo2;/* * 電視類 */public class TVs extends Goods {    @Override    public void printPrice() {    System.out.println("打印電視類商品價格!");    }    }

測試類:

package com.pb.demo2;public class Test {    public static void main(String[] args) {        //聲明3 個商品價格        Goods good=new Goods();        Foods food=new Foods();        TVs tvs=new TVs();        //調用方法        showPrice(good);        showPrice(food);        showPrice(tvs);    }    //顯示商品價格方法  static void showPrice(Goods good){      good.printPrice();  }}

結果:

打印商品價格打印食品類的商品價格!打印電視類商品價格!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 丰原市| 南充市| 麦盖提县| 遵化市| 徐水县| 漯河市| 潮安县| 伊金霍洛旗| 南部县| 吉安市| 株洲县| 尉犁县| 石柱| 泾阳县| 宝坻区| 屯门区| 渑池县| 平顺县| 红河县| 新安县| 义乌市| 石首市| 甘德县| 察雅县| 南宫市| 分宜县| 团风县| 乌鲁木齐市| 两当县| 满洲里市| 金坛市| 磐石市| 昌平区| 平顺县| 徐闻县| 绥化市| 双桥区| 衢州市| 栾城县| 昌江| 江达县|