Java基础_学习笔记_13_类的多态性(二)

 

 1 class Animal
 2 {
 3     private String name;
 4     Animal(String name)
 5     {
 6         this.name=name;
 7     }
 8     public void enjoy()
 9     {
10         System.out.println("叫声。。。");
11     }
12 }
13 class Cat extends Animal
14 {
15     private String eyeColor;
16     Cat(String n,String eyeColor)
17     {
18         super(n);
19         this.eyeColor=eyeColor;
20     }
21     public void enjoy()
22     {
23         System.out.println("猫叫声。。。");
24     }
25 }
26 class Dog extends Animal
27 {
28     private String furColor;
29     Dog(String n,String furColor)
30     {
31         super(n);
32         this.furColor=furColor;
33     }
34     public void enjoy()
35     {
36         System.out.println("狗叫声。。。");
37     }
38 }
39 /*
40 class Bird extends Animal
41 {
42     Bird()
43     {
44         super("bird");
45     }
46     public void enjoy()
47     {
48         System.out.println("鸟叫声。。。");
49     }
50 }*/
51 class Lady
52 {
53     private String name;
54     private Animal Pet;
55     Lady(String name,Animal Pet)
56     {
57         this.name=name;
58         this.Pet=Pet;
59     }
60     public void petEnjoy()
61     {
62         Pet.enjoy();
63     }
64 }
65 class Test
66 {
67     public static void main(String [] args)
68     {
69         Cat c=new Cat("catname","blue");
70         Dog d=new Dog("dogname","black");
71         //Bird b=new Bird();
72         Lady L1=new Lady("L1",c);
73         Lady L2=new Lady("L2",d);
74         //Lady L3=new Lady("L3",b);
75         L1.petEnjoy();
76         L2.petEnjoy();
77         //L3.petEnjoy();
78     }
79 }
80 /*
81 F:\java_example\lesson6>java Test
82 猫叫声。。。
83 狗叫声。。。
84 */

类的多态性,也叫动态绑定。它是指代码在执行期间(也就是编译之后,进行运行操作)判断所引用对象的实际类型,根据其实际的类型调用相应的方法。

对应上述代码我们可以看到,L1对应的c是Cat的对象,而Lady中c是Animal的引用句柄,如果根据引用类型那就要调用Animal的enjoy(),若按照实际类型,应该调用Cat的enjoy(),动态绑定这种机制就是指实际当中用的是什么类型就调用谁的enjoy()方法,实际中new的是Cat,所以调用Cat的enjoy()。之前是有一个指针指向了Animal的enjoy(),但一旦运行起来,指针就指向了Cat的enjoy()方法。所以只有在运行期间,new了之后,我才知道到底是调用哪个方法,这就是动态绑定的机制。简言之,方法被重写了,实际当中new的是谁,就调用谁的方法。

多态的特点:

可扩展性(就像上述代码中写到一样,如果我现在要加上鸟叫,那我只需要增加类,将代码中的注释去掉,不用过多修改程序)

多态的实现三个必备条件:继承;重写方法;父类引用指向子类对象

posted @ 2015-11-10 17:28  巅峰之旅  阅读(169)  评论(0编辑  收藏  举报