標籤:
一、多態的定義
同一事物,在不同時刻體現出不同狀態。
例如:水在不同狀態可能是:氣態、液態、固態。
二、多態前提和體現
1、有繼承關係
2、有方法重寫
3、有父類引用指向子類對象
三、編譯運行原理
1、編譯看左邊,父類是否有此方法,沒有就報錯。
2、運行看右邊,運行結果一般是右邊子類重寫後的結果。
四、案例分析
1 package polymorphic; 2 /** 3 * 多態案例1,基礎 4 * @author zhongfg 5 * @date 2015-06-16 6 */ 7 interface Car { 8 9 public abstract String getName();10 11 public abstract int getPrice();12 }13 14 class Benz implements Car {15 16 @Override17 public String getName() {18 // TODO Auto-generated method stub19 return "BENZ";20 }21 22 @Override23 public int getPrice() {24 // TODO Auto-generated method stub25 return 300000;26 }27 28 }29 30 class Bmw implements Car {31 32 @Override33 public String getName() {34 // TODO Auto-generated method stub35 return "BMW";36 }37 38 @Override39 public int getPrice() {40 // TODO Auto-generated method stub41 return 250000;42 }43 44 }45 46 class CarShop {47 48 public void carInfo(Car car){49 System.out.println("品牌:"+car.getName()+",價格:"+car.getPrice());50 }51 }52 53 public class PolymorphicDemo {54 public static void main(String[] args) {55 56 CarShop cs = new CarShop();57 //傳遞的是Benz的對象58 Car car = new Benz();59 cs.carInfo(car);60 61 //傳遞的是Bmw的對象62 car = new Bmw();63 cs.carInfo(car);64 65 /**66 * 運行結果:67 * 品牌:BENZ,價格:30000068 * 品牌:BMW,價格:25000069 */70 }71 }View Code
1 package polymorphic; 2 /** 3 * 多態案例2,轉型問題 4 * @author zhongfg 5 * @date 2015-06-16 6 */ 7 abstract class Animal { 8 9 public abstract void eat();10 }11 12 class Dog extends Animal {13 14 public void eat(){15 System.out.println("狗吃肉");16 }17 18 public void lookDoor(){19 System.out.println("狗看門");20 }21 }22 23 class Cat extends Animal {24 25 public void eat() {26 System.out.println("貓吃魚");27 }28 29 public void playGram() {30 System.out.println("貓玩遊戲");31 }32 }33 34 public class PolymorphicTest {35 36 public static void main(String[] args) {37 //記憶體中是狗,向上轉型38 Animal a = new Dog();39 a.eat();40 //向下轉型41 Dog d = (Dog)a;42 d.lookDoor();43 44 System.out.println("------------------");45 46 //記憶體中是貓,向上轉型47 a = new Cat();48 a.eat();49 //向下轉型50 Cat c = (Cat)a;51 c.playGram();52 53 //java.lang.ClassCastException,記憶體中的貓不能轉換成狗54 // Dog d2 = (Dog)a;55 56 /**57 * 運行結果:58 * 狗吃肉59 * 狗看門60 * ------------------61 * 貓吃魚62 * 貓玩遊戲63 */64 }65 }View Code
Java多態案例分析