Java: 多态

多态:

  可以理解为事物存的多种体现形态。

1,多态的体现
  父类的引用指向了自己的子类对象
  父类的引用也可以接受自己的子类对象

2,多态的前提
  必须是类与类之间有关系,要么继承,要么实现接口
  通常还有一个前提:存在覆盖

3,多态的好处
  多态的出现提高了程序的扩展性

4,多态的弊端
  只能使用父类的引用访问父类的成员

5,多态的应用

转型:

  向上转型:可以把子类对象的引用指向给父类对象

  向下转型:可以使用子类的特殊功能,但前提是父类的引用也是该子类的对象,也就是说始终做着变化的是子类对象的引用

 

 1 /*
 2 动物:猫,狗
 3 
 4 */
 5 
 6 abstract class Animal
 7 {
 8     public abstract void eat();
 9 }
10 
11 class Cat extends Animal
12 {
13     public void eat()
14     {
15         System.out.println("吃鱼");
16     }
17     public void catchMouse()
18     {
19         System.out.println("抓老鼠");
20     }
21 }
22 
23 class Dog extends Animal
24 {
25     public void eat()
26     {
27         System.out.println("啃骨头");
28     }
29     public void watchDoor()
30     {
31         System.out.println("看家");
32     }
33 }
34 
35 class Pig extends Animal
36 {
37     public void eat()
38     {
39         System.out.println("吃饲料");
40     }
41     public void gongDi()
42     {
43         System.out.println("拱地");
44     }
45 }
46 
47 class DuoTaiDemo 
48 {
49     public static void main(String[] args) 
50     {
51         Cat c = new Cat();
52         //c.eat();
53         function(c);
54         c.catchMouse();
55 
56         Dog d = new Dog();
57         //d.eat();
58         function(d);
59         d.watchDoor();
60 
61         function(new Pig());
62 
63         System.out.println("上面是普通使用,下面是多态");
64         Animal aCat = new Cat();//类型提升,向上转型
65         function(aCat);
66         Cat bCat = (Cat)aCat;//强制将父类的引用,转成子类类型,向下转型
67         bCat.catchMouse();
68 
69         Animal aDog = new Dog();
70         function(aDog);
71         Animal aPig = new Pig();
72         function(aPig);
73     }
74 
75     public static void function(Animal a)
76     {
77         a.eat();
78     }
79 }

 

多态成员函数的特点:

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

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

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

多态成员变量的特点:

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

多态静态成员函数的特点:

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

 

posted @ 2015-02-26 22:02  司英成·Owen  阅读(212)  评论(0编辑  收藏  举报