Java物件導向-對象的多態性

來源:互聯網
上載者:User

標籤:ace   cep   can   not   nim   logs   anim   子類   rgs   

Java物件導向-對象的多態性

Java中的多態性表現:

1,方法的重載和重寫;

2,可以用父類的引用指向子類的具體實現,而且可以隨時更換為其他子類的具體實現;

我們先搞個父類Animal:

package com.htli.chap03.sec13; public class Animal {     public void say(){        System.out.println("我是一個動物");    }}

再搞兩個子類,分別是Dog和Cat類,重寫父類方法say:

package com.htli.chap03.sec13; public class Cat extends Animal{     public void say(){        System.out.println("我是一個貓");    }}

 

package com.htli.chap03.sec13; public class Dog extends Animal{     public void say(){        System.out.println("我是一個狗");    }}

 然後我們寫個Test測試類別:

package com.htli.chap03.sec13; public class Test {     public static void main(String[] args) {        Dog dog=new Dog();        dog.say();                 Cat cat=new Cat();        cat.say();    }}

運行輸出:

我是一個狗

我是一個貓

這個大家肯定能看明白 簡單的子類繼承 以及執行個體化對象 調用方法 ;

 

下面我來用多態測試,父類引用指向子類具體實現:

package com.htli.chap03.sec13; public class Test {     public static void main(String[] args) {        // 父類引用指向Dog子類的具體實現        Animal animal=new Dog();        animal.say();                 // 更換實現        animal=new Cat();        animal.say();    }}

  

運行輸出:

我是一個狗

我是一個貓

 

對象的轉型:

向上轉型:子類對象->父類對象 安全

向下轉型:父類對象->子類對象 不安全

 

比如上面的執行個體:Animal animal=new Dog(); 就是後面的new Dog() 子類對象 向上  Animail animal 轉型  是安全的;

向下轉型 是父類對象強制轉換成子類對象:我們來改下Test類:

package com.htli.chap03.sec13; public class Test {     public static void main(String[] args) {        // 父類引用指向Dog子類的具體實現        Animal animal=new Dog();        animal.say();                 // 向下轉型        Dog dog=(Dog) animal;        dog.say();                 // 向下轉型  因為animal指向的是Dog具體實現 所以會報錯        Cat cat=(Cat)animal;        cat.say();    }}

  

運行報錯:

我是一個狗

我是一個狗

Exception in thread "main" java.lang.ClassCastException: com.htli.chap03.sec13.Dog cannot be cast to com.htli.chap03.sec13.Cat

at com.htli.chap03.sec13.Test.main(Test.java:15)

 

轉換異常 所以說向下轉型是不安全的,我們必須知道具體的實作類別;

 

 

我們上面用的繼承方式示範了多態 其實在實際開發中 更多的是用介面:

我們再寫一個執行個體:

我們先建一個父類介面People:

  

package com.htli.chap03.sec13; public interface People {     public void say();}

 接下來寫兩個具體實作類別,Student Teacher:

package com.htli.chap03.sec13; public class Student implements People{     @Override    public void say() {        System.out.println("我是學生");    } }

  

package com.htli.chap03.sec13; public class Teacher implements People{     @Override    public void say() {        System.out.println("我是老師");    } }

  我們來寫一個測試類別:

package com.htli.chap03.sec13; public class Test2 {     public static void main(String[] args) {        People p1=new Student();        p1.say();                 p1=new Teacher();        p1.say();    }}

  

運行輸出:

我是學生

我是老師

Java物件導向-對象的多態性

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.