一、基础概念
多态:
重点是对象的多态性。某一事物的多种体现形态。
多态的作用:
1.提高了代码的扩展性,后期出现的功能,可以被之前的程序所执行。
2.不能使用子类特有的功能。只能使用覆盖父类的功能。
多态的前提:
1.必须要有继承关系或者实现关系。
2.通常对方法进行重写、覆盖。
3.父类或者接口要引用指向子类对象。
多态向上转型:
1.提高程序的扩展性,隐藏了具体子类型
2.只能使用父类中的功能,不能使用子类特有的功能。功能被限定了。
多态向下转型:
1.可以使用子类型的特有功能。
2.必须面对具体的子类型。
3.为了避免运行时出现ClassCastException 问题,需要用关键字instanceof来进行判断。
注意:
多态至始至终都是子类对象在做着类型的变化。
二、代码实例
1 //父类Animal
2 abstract class Animal
3 {
4 abstract void eat();
5 abstract void sleep();
6 }
7
8 //Dog类继承Animal类
9 class Dog extends Animal
10 {
11 /**
12 将Animal类中的方法重写
13 */
14 void eat()
15 {
16 System.out.println("dog eat 吃骨头");
17 }
18 void sleep()
19 {
20 System.out.println("dog sleep .....");
21 }
22
23 /**
24 自己特有的方法
25 */
26 void say()
27 {
28 System.out.println("dog say .....");
29 }
30 }
31
32 //Cat类继承Animal类
33 class Cat extends Animal
34 {
35 /**
36 将Animal类中的方法重写
37 */
38 void eat()
39 {
40 System.out.println("Cat eat 吃鱼");
41 }
42 void sleep()
43 {
44 System.out.println("Cat sleep .....");
45 }
46 }
47
48 class DuoTaiDemo
49 {
50 //封装Dog类的方法
51 public static void method(Dog d)
52 {
53 d.eat();
54 d.sleep();
55 d.say();
56 }
57
58 //封装Cat类的方法
59 public static void method(Cat c)
60 {
61 c.eat();
62 c.sleep();
63 }
64
65 //封装父类Animal的方法
66 public static void method(Animal s)
67 {
68 s.eat();
69 s.sleep();
70 }
71
72 public static void main(String[] args)
73 {
74 Dog d1 = new Dog();
75 method(d1);
76
77 Cat c = new Cat();
78 method(c);
79
80 Animal s = new Dog(); //多态性,向上转型,将Dog提升为Animal。
81 method(s); //只能使用覆盖了父类Animal的eat方法和sleep方法。不能使用Dog类中自己的say方法。
82
83 Animal a = new Cat(); //多态性,向上转型。
84 method(a);
85
86 /**
87 向下转型,为了避免运行时出现ClassCastException 问题,
88 需要用关键字instanceof来进行判断。
89 */
90 if( !(s instanceof Dog))
91 {
92 System.out.println("类型不匹配");
93 return ;
94 }
95 Dog d2 = (Dog)s; //多态性,向下转型。
96 d2.eat();
97 d2.sleep();
98 d2.say();
99 }
100 }
三、运行代码