Java基础十一--多态

一、多态定义

简单说:就是一个对象对应着不同类型.

多态在代码中的体现:
父类或者接口的引用指向其子类的对象。

  1 /*
  2
  3 对象的多态性。
  4
  5 class 动物
  6 {}
  7
  8 class 猫 extends 动物
  9 {}
 10
 11 class 狗 extends 动物
 12 {}
 13
 14
 15
 16 猫 x = new 猫();
 17
 18 动物 x = new 猫();//一个对象,两种形态。
 19
 20
 21
 22 猫这类事物即具备者猫的形态,又具备着动物的形态。
 23 这就是对象的多态性。
 24
 25 简单说:就是一个对象对应着不同类型.
 26
 27 多态在代码中的体现:28     父类或者接口的引用指向其子类的对象。
 29
 30
 31 多态的好处:
 32     提高了代码的扩展性,前期定义的代码可以使用后期的内容。
 33
 34 多态的弊端:
 35     前期定义的内容不能使用(调用)后期子类的特有内容。通过向下转型来解决。
 36
 37 多态的前提:
 38     1,必须有关系,继承,实现。(实现是特殊的继承)
 39     2,要有覆盖。
 40
 41
 42
 43 */
 44
 45 abstract class Animal
 46 {
 47     abstract void eat();
 48
 49 }
 50
 51 class Dog extends Animal
 52 {
 53     void eat()
 54     {
 55         System.out.println("啃骨头");
 56     }
 57     void lookHome()
 58     {
 59         System.out.println("看家");
 60     }
 61 }
 62
 63 class Cat extends Animal
 64 {
 65     void eat()
 66     {
 67         System.out.println("吃鱼");
 68     }
 69     void catchMouse()
 70     {
 71         System.out.println("抓老鼠");
 72     }
 73 }
 74
 75 class Pig extends Animal
 76 {
 77     void eat()
 78     {
 79         System.out.println("饲料");
 80     }
 81     void gongDi()
 82     {
 83         System.out.println("拱地");
 84     }
 85 }
 86
 87
 88
 89 class DuoTaiDemo
 90 {
 91     public static void main(String[] args)
 92     {
 93
 94 //        Cat c = new Cat();
 95 //        c.eat();
 96 //        c.catchMouse();
 97
 98         Animal a = new Cat(); //自动类型提升,猫对象提升了动物类型。但是特有功能无法s访问。99                             //作用就是限制对特有功能的访问。
100                             //专业讲:向上转型。将子类型隐藏。就不用使用子类的特有方法。
101
102
103 //        a.eat();
104
105         //如果还想用具体动物猫的特有功能。
106         //你可以将该对象进行向下转型。
107 //        Cat c = (Cat)a;//向下转型的目的是为了使用子类中的特有方法。
108 //        c.eat();
109 //        c.catchMouse();
110
111 //        注意:对于转型,自始自终都是子类对象在做着类型的变化。
112 //        Animal a1 = new Dog();
113 //        Cat c1 = (Cat)a1;//ClassCastException
114
115
116         /*
117         Cat c = new Cat();
118
119 //        Dog d = new Dog();
120
121 //        c.eat();
122         method(c);
123 //        method(d);
124 //        method(new Pig());
125         */
126
127         method(new  Dog());
128
129     }
130
131     public static void method(Animal a)//Animal a = new Dog();
132     {
133         a.eat();
134      //解决类型匹配问题的时候,我们就可以判断一下
135         if(a instanceof Cat)//instanceof:用于判断对象的具体类型。只能用于引用数据类型判断
136 //                        //通常在向下转型前用于健壮性的判断。
137
138         {
139             Cat c = (Cat)a;
140             c.catchMouse();
141         }
142         else if(a instanceof Dog)
143         {
144             Dog d = (Dog)a;
145             d.lookHome();
146         }
147         else
148         {
149
150         }
151
152     }
153     /*
154     public static void method(Cat c)
155     {
156         c.eat();
157     }
158     public static void method(Dog d)
159     {
160
161     }
162     */
163 }

向上转型:父类引用指向子类对象。子类的特有功能无法访问。

向下转型:子类引用指向父类对象。

1 Animal a = new Cat(); //自动类型提升,猫对象提升了动物类型。但是特有功能无法s访问。
2                       //作用就是限制对特有功能的访问。
3                       //专业讲:向上转型。将子类型隐藏。就不用使用子类的特有方法。
4
5 Cat c = (Cat)a;//向下转型的目的是为了使用子类中的特有方法。

在实际应用中,向上转型便于代码扩展(之前写的代码以后能用,只有继承或者实现基类了的),但是要用到子类特有的功能的时候,必须向下转型。

很多时候我们向上转型为Object类,当用到自己特有功能的时候,我们向下转型转回来。

二、多态生活实例

 1 /*
 2 毕老师和毕姥爷的故事。
 3 */
 4
 5 class 毕姥爷
 6 {
 7     void 讲课()
 8     {
 9         System.out.println("管理");
10     }
11     void 钓鱼()
12     {
13         System.out.println("钓鱼");
14     }
15 }
16
17 class 毕老师 extends 毕姥爷
18 {
19     void 讲课()
20     {
21         System.out.println("Java");
22     }
23     void 看电影()
24     {
25         System.out.println("看电影");
26     }
27 }
28
29
30
31
32
33 class  DuoTaiDemo2
34 {
35     public static void main(String[] args)
36     {   //原来
37 //        毕老师 x = new 毕老师();
38 //        x.讲课();
39 //        x.看电影();
40      //多态
41         毕姥爷 x = new 毕老师();
42         x.讲课(); //这里讲的是Java的内容,Java把管理学覆盖了
43         x.钓鱼();
44
45         毕老师 y = (毕老师)x;//ClassCastException
46         y.看电影();
47
48
49
50
51     }
52 }

转载于:https://www.cnblogs.com/Renyi-Fan/p/6927015.html

Java基础十一--多态相关推荐

  1. Java基础(十一) Stream I/O and Files

    Java基础(十一) Stream I/O and Files 1. 流的概念 程序的主要任务是操纵数据.在Java中,把一组有序的数据序列称为流. 依据操作的方向,能够把流分为输入流和输出流两种.程 ...

  2. Java基础之多态深入解析

    Java基础之多态深入解析 多态的基本概念 同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性.简单的说:就是用基类的引用指向子类的对象. 多态的优点 消除类型之间的耦合关系 ...

  3. java基础之多态的详细解释_JAVA基础之多态

    下面我为大家讲解一下JAVA基础之多态,希望大家喜欢. 多态就是事物存在的多种形态,比如你在大街上看见一只藏獒,你可以说这只藏獒真凶猛,也可以说这只狗真凶猛,还可以说这个动物真凶猛,以上三种说法其实都 ...

  4. 【Java基础】多态、equals、造型cast、访问修饰符(public、protected、default、private)、static、final

    1.面型对象–多态 多态的概念:多态性就是指同样的消息被类的不同的对象接收时导致的完全不同的行为的一种现象.这里的消息即对类成员函数的调用. 实现上面调用宠物叫,每种宠物有各自的叫声 public c ...

  5. 【Java基础】多态

    首先先来个总结: 什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消 ...

  6. java基础(十一) 枚举类型

    枚举类型Enum的简介 1.什么是枚举类型 枚举类型: 就是由一组具有名的值的有限集合组成新的类型.(即新的类). 好像还是不懂,别急,咱们先来看一下 为什么要引入枚举类型 在没有引入枚举类型前,当我 ...

  7. Java基础---认识多态

    多态 1.概念:一个事物具有多种状态 polymorphic对象的多态性:同一个对象,可以具有不同的名称,同一个对象,有不同的类型的引用指向他.本质:同一个物体,有不同的名称和描述.类型的多态性:同一 ...

  8. Java基础 | 多态

    java面向对象三大特征:封装.继承.多态. 多态(Polymorphism)按字面的意思就是"多种状态".在面向对象语言中,接口的多种不同的实现方式即为多态. 多态的转型: 向上 ...

  9. Java基础12 多态

    作者:Vamei 出处:http://www.cnblogs.com/vamei 我们之前使用类创造新的类型(type),并使用继承来便利我们创建类的过程.我将在这一讲中深入类型,并介绍多态(poly ...

最新文章

  1. Nature综述——真菌的多样性:真菌的高通量测序及鉴定
  2. 【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 | LoadedApk 后续分析 )
  3. Scrapy框架的学习(12. scrapy中的模拟登陆,发送post请求模拟登陆)
  4. 计算机系统基础:计算机性能评价知识笔记
  5. WINCE 网卡控制
  6. 高光谱数据集_文献选读|从地面和空间高光谱数据中提取红边位置参数,以估算水稻冠层叶氮含量...
  7. GridView动态添加模版列
  8. 【Spring 5】响应式Web框架实战(上) 1
  9. 给想进大厂的同学一条忠告!
  10. 微信小程序——图片打马赛克
  11. 关于julia的路径问题,往往很重要!
  12. 上周热点回顾(5.8-5.14)
  13. 因为计算机丢失d3dx10,Win7打开剑灵游戏提示丢失d3dx10_43.dll怎么解决
  14. css3ps插件,CSS3Ps(PS图层转换插件) V1.0 官方版
  15. LabVIEW与Access数据库通信时,如何创建DSN文件
  16. 朋友圈(类似微信朋友圈)的显示
  17. 1.1 n阶行列式子的定义
  18. php正则表达式懒惰匹配,正则表达式-贪婪与懒惰
  19. IDEA在同一工作空间,显示多个项目
  20. 五节课从零起步(无需数学和Python基础)编码实现AI人工智能框架电子书V1

热门文章

  1. Nginx服务架构初探(七):nginx邮件服务
  2. python + selenium 练习篇 - 定位元素的方法
  3. HBase编程 API入门系列之create(管理端而言)(8)
  4. 《Head.First设计模式读书笔记》之设计原则一、二和三
  5. 苹果开机启动参数说明
  6. 阿里云开源编程马拉松入围项目
  7. Python程序-离散和线性图形
  8. listView基本实现
  9. (转帖)C#--web services之wsdl文件生成cs
  10. centos6架设dhcp服务器提供两个网段的IP地址分配