Java面向对象(4) ——多态
生活随笔
收集整理的這篇文章主要介紹了
Java面向对象(4) ——多态
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 多態的概念
- 對象上下轉型
- 多態應用之打印機
多態的概念
多態是指同一個操作作用于某一類對象,可以有不同的解釋,產生不同的執行結果。比如:貓吃魚、狗吃肉、人吃米飯。
多態存在的三個必要條件:
- 需要存在繼承(extends)或實現(接口)關系
- 同樣的方法調用而執行不同操作、運行不用代碼(重寫)
- 在運行時父類或者接口的引用變量可以引用其子類的對象
多態的作用:
- 多態通過分類做什么(eat)和怎么做(貓和狗eat不一樣),從一個角度將接口和實現進行分離
- 多態消除了類型之間的耦合關系
- 多態的存在提高了程序的拓展性和后期的可維護性
例子:(直接點擊運行提示缺少cat類,右擊run as運行成功 why?)
//或者:abstract class Animal class Animal {String name;public void eat();//或者:abstract public void eat(); }class Dog extends Animal {public void eat(){//區分重寫和重載System.out.println("狗啃骨頭");}}class Cat extends Animal {public void eat(){System.out.println("貓吃魚");} }public class Test {public static void main(String[] args){Animal an1 = new Dog();//在運行時父類或者接口的引用變量可以引用其子類的對象Animal an2 = new Cat();//屬于下面講的向上轉型 子類向父類轉 an1.eat();an2.eat();} }對象上下轉型
-
由子類轉型成父類,在繼承圖上是向上移動的,一般稱為向上轉型
-
向上轉型是從一個較專用類型向通用類型轉換,所以總是安全的,也就是說,子類是父類的超集
-
向上轉型過程中,類接口中唯一可能發生的事情是丟失方法,而不是獲取方法
-
與之相反的操作是向下轉型,不安全(可能需要instanceof操作符協助)
例子:
//或者:abstract class Animal class Animal {String name;public void eat();//或者:abstract public void eat(); }class Dog extends Animal {public void eat(){//區分重寫和重載System.out.println("狗啃骨頭");}}class Cat extends Animal {public void eat(){System.out.println("貓吃魚");}public void sleep(){System.out.println("貓睡覺");} }public class Test {public static void main(String[] args){Animal an1 = new Dog();Animal an2 = new Cat();an1.eat();//an2.sleep(); 向上轉型丟失方法Cat cat1 = new Cat();//這樣就不會丟失方法cat1.sleep();if(an1 instanceof Cat){ //instanceof通過返回值(布爾值)指出對象是否是特定類或是它的一個子類System.out.println("aa");}if(an2 instanceof Cat){System.out.println("bb");Cat cat2 = (Cat)an2;//類型強轉,類似C語言cat2.eat();}} }運行結果:
狗啃骨頭 貓睡覺 bb 貓吃魚多態應用之打印機
總結
以上是生活随笔為你收集整理的Java面向对象(4) ——多态的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《算法图解》笔记与总结
- 下一篇: Java基础 —— 异常