Java多态案例分析

一、多态的定义

同一事物,在不同时刻体现出不同状态。

例如:水在不同状态可能是:气态、液态、固态。

二、多态前提和体现

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     @Override
17     public String getName() {
18         // TODO Auto-generated method stub
19         return "BENZ";
20     }
21 
22     @Override
23     public int getPrice() {
24         // TODO Auto-generated method stub
25         return 300000;
26     }
27 
28 }
29 
30 class Bmw implements Car {
31 
32     @Override
33     public String getName() {
34         // TODO Auto-generated method stub
35         return "BMW";
36     }
37 
38     @Override
39     public int getPrice() {
40         // TODO Auto-generated method stub
41         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 运行结果:
68 品牌:BENZ,价格:300000
69 品牌:BMW,价格:250000
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 猫玩游戏
View Code

 

posted @ 2015-06-16 11:50  Self_improve  阅读(382)  评论(0编辑  收藏  举报