Java学习之多态

多态:一个事物有多种描述(如一个人(A)的爸爸是B爷爷是C,那我们描述A的话,可以通过直接描述A,也可以描述B的儿子,也可以描述C的孙子)

代码体现:父类或接口的引用指向子类对象

 1 class 动物
 2 {
 3     ... ...
 4 }
 5 class 猫 extends 动物
 6 {
 7     ... ...
 8 }
 9 class 狗 extends 动物
10 {
11     ... ...
12 }
13 
14 动物 X=new 猫();

多态的应用:

 1 abstract class Animal
 2 {
 3     abstract void eat();
 4 }
 5 
 6 class Cat extends Animal
 7 {
 8     void eat()
 9     {
10         System.out.println("猫吃鱼");
11     }
12     void catchMouse()
13     {
14         System.out.println("猫抓老鼠");
15     }
16 }
17 
18 class Dog extends Animal
19 {
20     void eat()
21     {
22         System.out.println("狗啃骨头");
23     }
24     
25     void lookHome()
26     {
27         System.out.println("狗看家");
28     }
29 }
30 
31 class DuoTaiDemo
32 {
33     public static void main(String[] args)
34     {
35         Cat c=new Cat();
36         Dog d=new Dog();
37         method(c);
38         method(d);
39     }
40     
41     void method(Cat c)
42     {
43         c.eat();
44     }
45     void method(Dog d)
46     {
47         d.eat();
48     }
50 }

发现:

1、void method(Cat c)代码几乎一样

2、如果以后需求要增加动物(如:猪)是不是还要再写一个关于猪的method方法呢

通过多态修改代码:

 

 1 //增加猪
 2 class Pig extends Animal
 3 {
 4     void eat()
 5     {
 6         System.out.println("猪吃饲料");
 7     }
 8     void gongDi()
 9     {
10         System.out.println("猪拱地");
11     }
12 }
13 
14 class DuoTaiDemo
15 {
16     public static void main(String[] args)
17     {
18         Cat c=new Cat();
19         Dog d=new Dog();
20         method(c);
21         method(d);
22         //提高代码的扩展性
23         method(new Pig());
24     }
25     
26     /*28     void method(Cat c)
29     {
30         c.eat();
31     }
32     void method(Dog d)
33     {
34         d.eat();
35     }
36     */
37     void method(Animal a)
38     {
39         a.eat();
40     }
41 }

 

多态的好处:

1、简化代码

2、提高代码的扩展性

这样的代码有好处就有弊端如果想使用Cat类的catchMouse方法的话

代码如下

 1 class DuoTaiDemo
 2 {
 3     public static void main(String[] args)
 4     {
 5         Animal a=new Cat();
 6         a.eat();
 7         //a.catchMouse();//这个就是弊端,Animal中不具备catchMouse
 8         /*
 9         instanceof作用:判断对象类型 
10         方式:
11             变量 instanceof 类或接口
12         使用前提:强制转换
13         */
14         if(a instanceof Cat)
15         {
16             ((Cat)a).catchMouse();
17         }
18     }
19 }

总结:

一、多态的好处:
   简化代码
   提高代码的扩展性
二、多态的弊端:
   无法使用子类特有内容
三、多态的前提:
   必须有关系(继承、实现)

 

posted @ 2019-12-18 15:41  一杯水M  阅读(168)  评论(0编辑  收藏  举报