黑马程序员-学习笔记之 多态
来源:互联网 发布:js跨域请求 编辑:程序博客网 时间:2024/06/06 18:57
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
利用多态可以使程序具有良好的扩展性,并可以对这个类的所有子类的对象进行通用的处理。这其中利用的是“向上转型”。比如现在要绘制一个平行四边形,在平行四边形中定义一个方法draw(),具体实现代码如下:
public class Parallelogram{//平行四边形类public void draw(Parallelogram p)//定义draw()方法,参数为本类对象{//绘图语句}}这时,如果要定义个绘制正方形的方法,就要从新定义一个正方形类来处理正方形对象,这样做会导致代码冗余。
但如果定义一个四边形类,让它所有的子类对象,用“向上转型”的方法,使每个继承四边形类的对象作为draw()方法的参数。代码如下所示:
public class Quadrangle {// 实例化保存四边形对象的数组对象private Quadrangle[] qtest = new Quadrangle[6];private int nextIndex = 0;public void draw(Quadrangle q) { // 定义draw()方法,参数为四边形对象if (nextIndex < qtest.length) {qtest[nextIndex] = q;System.out.println(nextIndex);nextIndex++;}}public static void main(String[] args) {// 实例化两个四边形对象,用于调用draw()方法Quadrangle q = new Quadrangle();q.draw(new Square()); // 以正方形对象为参数调用draw()方法// 以平行四边形对象为参数调用draw()方法q.draw(new Parallelogramgle());}}class Square extends Quadrangle { // 定义一个正方形类,继承四边形类public Square() {System.out.println("正方形");}}// 定义一个平行四边形类,继承四边形类class Parallelogramgle extends Quadrangle {public Parallelogramgle() {System.out.println("平行四边形");}}它的运行结果:
上面说了这么多,那到底什么是多态呢?多态可以这么理解,多态就是事物存在的多种体现形态。多态具有以下几个特点:
一、多态的体现:
父类的引用指向了自己的子类对象
父类的引用也可以接收自己的子类对象
二、多态的前提:
类与类之间必须要有关系:要么是继承,要么是实现,最重要的前提是:子父类之间存在覆盖。
三、多态的好处:
多态的出现,可以大大提高程序的扩展性
四、多态的缺点:
多态虽然可以大大提高程序的扩展性,但它也有弊端,就是只能使用父类的引用访问父类中的成员。
以下程序是多态的一个实例:
abstract class Animal{abstract void eat();}class Cat extends Animal{public void eat(){System.out.println("吃鱼");}public void catchMouse(){System.out.println("抓老鼠");}}class Dog extends Animal{public void eat(){System.out.println("吃骨头");}public void kanJia(){System.out.println("看家");}}class Pig extends Animal{public void eat(){System.out.println("饲料");}public void gongDi(){System.out.println("拱地");}}//-----------------------------------------class DuoTaiDemo2 {public static void main(String[] args) {function(new Dog());function(new Cat());}public static void function(Animal a){a.eat();if(a instanceof Cat){Cat c = (Cat)a;c.catchMouse();}else if(a instanceof Dog){Dog c = (Dog)a;c.kanJia();}}}运行结果:
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
0 0
- 黑马程序员-学习笔记之 多态
- 黑马程序员学习笔记之总述
- 黑马程序员学习笔记之环境变量
- 黑马程序员-------C#学习笔记之二
- 黑马程序员之SQL学习笔记
- 黑马程序员之C#学习笔记:arraylist
- “黑马程序员”视频学习笔记之常识
- "黑马程序员"学习笔记之正则表达式
- 黑马程序员_StringBuilder之学习笔记
- 黑马程序员_File之学习笔记
- 黑马程序员------java学习笔记之集合
- 黑马程序员------java学习笔记之数据结构
- 黑马程序员------java学习笔记之反射
- 黑马程序员------java学习笔记之javascript
- 黑马程序员------java学习笔记之高新技术
- 黑马程序员---java学习笔记之字符串
- 黑马程序员---java学习笔记之集合
- 黑马程序员---java学习笔记之IO
- 算法复杂度分析--递归树和主方法简介
- ZOJ 3862 Intersection (dijkstra)
- lua 系统库 时间 执行 文件
- POJ 1185 状压DP
- 第十二天:poj1014(又见dfs,这次有图有真相)
- 黑马程序员-学习笔记之 多态
- 【USACO】Sorting a Three-Valued Sequence(思路)
- iOS后台持续定位并定时上传
- 快速排序
- 数列排序
- 如何在OpenCV2.3中实现CvvImage
- 【HTML/XML 1】HTML 速成总结
- 【笔记】Haskell
- GridView的使用