设计模式前篇——OO多态
来源:互联网 发布:淘宝店首页设计 编辑:程序博客网 时间:2024/06/09 13:56
多态作为OO几大特性之一,在我们设计模式与实际开发中经常被用到, 在设计模式学习之前,有必要对多态的机制研究总结下。
一、什么是多态(Polymorphism):
这个概念各人各说法,我的理解是:
多态是一个特征,及对象(接口、基类、子类)的多种表现行为。在java中主要体现在以下几点:、
1、重载(overload)与重写(override):
重载:参数多态,即一个类中,相同方法名不同参数(类型、个数)。
重写:子类覆写父类的方法。
2、向上转型(upcast):如:将子类对象赋值给父类对象,由父类对象调用子类的方法。
3、动态绑定(binding) :在程序运行时,根据对象类型调用相应对象的方法。
The fact that an object variable can refer to multiple actual types is called polymorphism. Automatically selecting the appropriate method at run time is called dynamic binding.【摘自Core Java2】
一个对象变量实际上能指向多种类型就是多态。而这个对象变量又能在运行时自动的选择适当的方法来调用就叫动态绑定。
二、OO多态的本质:
多态可以说是OO非常重要的一个机制,可以说没有多态就谈不上是OO。我个人觉得多态的实现机制就是动态绑定(binding),多态的实现思想效果就是达到对象类型和行为实现的隔离。
三、OO多态的实现机制:
多态主要是通过动态绑定(dynamic binding)来实现的。
所谓绑定(binding)就是建立method call(函数调用)和method body(函数体)的关联,动态绑定就是指在程序运行期,判定对象类型并调用相应对象的方法。所以在method call 时必须将对象的类型信息置于对象内,以用来判定对象类型和选择对象。
java里的方法除了使用final修饰的以外,都采用动态绑定机制。
四、OO多态的基本实例:
a、类继承多态
package com.gyb.Polymorphism; /** * @Title: Animal.java * @Package com.gyb.Polymorphism * @Description: 动物基类 * @author gaoyb * @date Dec 22, 2011 11:09:26 AM * @version V1.0 */public class Animal {public void jump(){System.out.println("I am jumping !");}}
package com.gyb.Polymorphism; /** * @Title: Cat.java * @Package com.gyb.Polymorphism * @Description: 动物子类:猫 * @author gaoyb * @date Dec 22, 2011 11:09:26 AM * @version V1.0 */public class Cat extends Animal {public void jump(){System.out.println("Cat is jumping !");}}
package com.gyb.Polymorphism; /** * @Title: Dog.java * @Package com.gyb.Polymorphism * @Description: 动物子类:狗 * @author gaoyb * @date Dec 22, 2011 11:09:26 AM * @version V1.0 */public class Dog extends Animal{public void jump(){System.out.println("Dog is jumping !");}}
package com.gyb.Polymorphism;public class Test {public static void main(String args[]){Animal obj1 = new Cat();Animal obj2 = new Dog();obj1.jump();//输出结果:Cat is jumping !obj2.jump();//输出结果:Dog is jumping !}}
b、接口实现多态
package com.gyb.Polymorphism; public interface C {public void jump();}class A implements C {public void jump(){System.out.println("A is jumping!");}}class B implements C {public void jump(){System.out.println("B is jumping!");}}
package com.gyb.Polymorphism;public class Test {public static void main(String args[]){C oa = new A();C ob = new B();oa.jump();//输出结果:A is jumping !ob.jump();//输出结果:B is jumping !}}
- 设计模式前篇——OO多态
- "Head First 设计模式"读书笔记——OO设计原则
- 设计模式前篇——抽象类与接口
- 设计模式前篇——面向接口编程
- OO设计模式学习笔记
- OO 演化到设计模式
- 设计模式之OO原则
- 设计模式之OO思想
- OO 设计模式交流群
- 设计模式学习总结——OO编程是门艺术!
- 设计模式4——装饰模式(前)
- OO设计模式和设计原则
- OO设计模式和设计原则
- OO设计模式和设计原则
- OO设计模式和设计原则(转帖)
- OO设计模式和设计原则
- OO设计模式和设计原则
- OO设计模式和设计原则
- 索引+C#面试题客串
- WEB前端开发规范文档
- 软件界面交互式设计注意事项
- 查看所有表空间大小
- ASP.Net TextBox控件只允许输入数字
- 设计模式前篇——OO多态
- Bitmap和Drawable相互转换方法
- maven2之m2eclipse使用手册之七通用容器插件cargo-maven2-plugin
- IBM大胆预测:读心术等概念技术会成为现实
- 使用ARM标准C库进行嵌入式应用程序开发
- 【转】windows xp下PHP环境搭建及BugFree安装步骤
- 关于向Word文档中的RichText控件插入rtf内容的问题
- Linux 下时间和定时器
- 堆和栈的区别(经典的一篇)