零EVA

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

多态:可以理解为事物存在的多重体现形态

函数的多态性
对象的多态性

1 多态的体现

  父类的引用指向自己的子类对象(代码体现形式)

  换个说法,父类的引用也可以接收自己的子类对象

2 多态的前提

  必须是类与类之间有关系,要么继承,要么实现

  实现覆盖

3 多态的好处

  多态的出现大大的提高了程序的扩展性

4 多态的弊端

  提高了扩展性,但是只能使用父类的引用访问父类中的成员

5 多态的应用

 

6 多态的成员函数(非static类型)的特点(多态使用的注意事项)

  在编译时期:参阅引用型变量所属的类中是否有调用的方法,如果有,编译通过,否则就编译失败

  在运行时期:参阅对象所属的类中是否有调用的方法。

  简单总结就是:成员函数在多态调用时,编译看左边,运行看右边 

 6 静态(static)成员函数的特点

  无论编译和运行,都参考左边

8 在多态中成员变量的特点:

  无论编译和运行,都参考引用变量所属的类(参考左边)

 

 1 abstract class Animal
 2 {
 3     public abstract void eat();
 4 }
 5 
 6 class Cat extends Animal
 7 {
 8     public void eat()
 9     {
10         System.out.println("吃鱼");
11     }
12     public void catchMouse()
13     {
14         System.out.println("抓老鼠");
15     }
16 }
17 
18 class Dog extends Animal
19 {
20     public void eat()
21     {
22         System.out.println("吃骨头");
23     }
24     public void watchHome()
25     {
26         System.out.println("看家");
27     }
28 }
29 
30 
31 class PolymorphismDemo
32 {
33     public static void main(String[] args)
34     {
35         Animal c = new Cat();//多态//类型提升,向上转型
36         //c.catchMouse();//invalid
37         //那么如果想要调用猫的特有方法时,如何操作?
38         //强制将父类的引用转成子类类型,向下转型
39         Cat a = (Cat)c;
40         a.catchMouse();
41         //Animal a = new Animal();Cat c = (Cat)a;//对比上面invalid
42         //千万不要将父类对象转成子类类型
43         //我们能转换的是父类的引用指向了子类对象的时候,该引用可以被提升和强制转换
44         //多态自始自终都是子类对象在做变化
45         //function(new Cat());
46         //function(new Dog());
47         
48     }
49     public static void function(Animal a)
50     {
51         a.eat(); 
52         if(a instanceof Cat)
53         {
54             Cat c = (Cat)a;
55             c.catchMouse;
56         }
57         else if(a instanceof Dog)
58         {
59             Dog d = (Dog)a;
60             d.watchHome();
61         }
62     }
63     /*
64     public static void function(Cat c)
65     {
66         c.eat();
67     }
68     public static void function(Dog d)
69     {
70         d.eat();
71     }
72     */
73 }

 

posted on 2017-06-09 20:10  零EVA  阅读(166)  评论(0)    收藏  举报