码迷,mamicode.com
首页 > 其他好文 > 详细

黑马程序员------继承(三)

时间:2015-06-13 18:29:42      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:

黑马程序员------继承(三)

 1.1 多态:可以理解为某一类事物存在的多种体现形态。

人:男人,女人

动物:猫,狗。

猫 x = new 猫();

动物 x = new 猫();

1,体现
父类的引用指向了自己的子类对象。
父类的引用也可以接收自己的子类对象。
2,前提
必须是类与类之间有关系。要么继承,要么实现。
通常还有一个前提:存在覆盖。

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

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

示例1:

 1 /*
 2 动物,
 3 猫,狗。
 4 */
 5 
 6 abstract class Animal
 7 {
 8     abstract void eat();
 9 
10 }
11 
12 class Cat extends Animal
13 {
14     public void eat()
15     {
16         System.out.println("吃鱼");
17     }
18     public void catchMouse()
19     {
20         System.out.println("抓老鼠");
21     }
22 }
23 
24 
25 class Dog extends Animal
26 {
27     public void eat()
28     {
29         System.out.println("吃骨头");
30     }
31     public void kanJia()
32     {
33         System.out.println("看家");
34     }
35 }
36 
37 
38 class Pig extends Animal
39 {
40     public void eat()
41     {
42         System.out.println("饲料");
43     }
44     public void gongDi()
45     {
46         System.out.println("拱地");
47     }
48 }
49 
50 
51 class DuoTaiDemo 
52 {
53     public static void main(String[] args) 
54     {
55         //Cat c = new Cat();
56         //c.eat();
57 
58         //Dog d = new Dog();
59         //d.eat();
60         //Cat c = new Cat();
61         /*
62         Cat c1 = new Cat();
63         function(c1);
64 
65         function(new Dog());
66         function(new Pig());
67         */
68 
69         //Animal c = new Cat();
70         //c.eat();
71 
72         
73         function(new Cat());
74         function(new Dog());
75         function(new Pig());
76         
77 
78         
79     }
80     public static void function(Animal a)//Animal a = new Cat();
81     {
82         a.eat();
83         //a.catchMouse();
84     }
85     
86 }

 

1.2 如何使用子类特有方法呢?

     向上转型或者向下转型(示例2)

示例2:

 1 class Cat extends Animal
 2 {
 3     public void eat()
 4     {
 5         System.out.println("吃鱼");
 6     }
 7     public void catchMouse()
 8     {
 9         System.out.println("抓老鼠");
10     }
11 }
12 
13 
14 class Dog extends Animal
15 {
16     public void eat()
17     {
18         System.out.println("吃骨头");
19     }
20     public void kanJia()
21     {
22         System.out.println("看家");
23     }
24 }
25 
26 
27 class Pig extends Animal
28 {
29     public void eat()
30     {
31         System.out.println("饲料");
32     }
33     public void gongDi()
34     {
35         System.out.println("拱地");
36     }
37 }
38 
39 
40 class DuoTaiDemo2 
41 {
42     public static void main(String[] args) 
43     {
44         //Animal a = new Cat();//类型提升。 向上转型。
45         //a.eat();
46 
47         //如果想要调用猫的特有方法时,如何操作?
48         //强制将父类的引用。转成子类类型。向下转型。
49         ///Cat c = (Cat)a;
50         //c.catchMouse();
51         //千万不要出现这样的操作,就是将父类对象转成子类类型。
52         //我们能转换的是父类应用指向了自己的子类对象时,该应用可以被提升,也可以被强制转换。
53         //多态自始至终都是子类对象在做着变化。
54                //Animal a = new Animal();
55               //Cat c = (Cat)a;
56         
57 
58     
59         function(new Dog());
60         function(new Cat());
61 
62 
63     }
64     public static void function(Animal a)//Animal a = new Cat();
65     {
66         a.eat();
67         /*
68         if(a instanceof Animal)
69         {
70             System.out.println("haha");
71         }
72         else 
73         */
74         if(a instanceof Cat)
75         {
76             Cat c = (Cat)a;
77             c.catchMouse();
78         }
79         else if(a instanceof Dog)
80         {
81             Dog c = (Dog)a;
82             c.kanJia();
83         }
84 
85     }
86 
87 }
88  

 

PS:

instanceof : 用于判断对象的类型。 对象 intanceof 类型(类类型 接口类型) 


1.3 多态在成员变量和成员函数中的特点:

在多态中成员函数的特点:
在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有编译失败。
在运行时期:参阅对象所属的类中是否有调用的方法。
简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。


在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)。


在多态中,静态成员函数的特点:
无论编译和运行,都参考做左边。

示例3

 1 class Fu
 2 {
 3     static int num = 5;
 4     void method1()
 5     {
 6         System.out.println("fu method_1");
 7     }
 8     void method2()
 9     {
10         System.out.println("fu method_2");
11     }
12     static void method4()
13     {
14         System.out.println("fu method_4");
15     }
16 }
17 
18 
19 class Zi extends Fu
20 {
21     static int num = 8;
22     void method1()
23     {
24         System.out.println("zi method_1");
25     }
26     void method3()
27     {
28         System.out.println("zi method_3");
29     }
30 
31     static void method4()
32     {
33         System.out.println("zi method_4");
34     }
35 }
36 class  DuoTaiDemo4
37 {
38     public static void main(String[] args) 
39     {
40         //Fu f = new Zi();
41         //System.out.println(f.num);
42         //Zi z = new Zi();
43         //System.out.println(z.num);
44 
45         //f.method1();
46         //f.method2();
47         //f.method3();
48 
49         Fu f = new Zi();
50         System.out.println(f.num);
51         f.method4();
52 
53         Zi z = new Zi();
54         z.method4();
55         }
56 }

 

黑马程序员------继承(三)

标签:

原文地址:http://www.cnblogs.com/jiandonn/p/4573769.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!