面向对象编程中的多态(polymorphism)
2015-11-17 19:26
253 查看
多态的定义:如果编译时和运行时类项不一样就会出现所谓的多态(polymorphism),多态可以向上转型。
编译时类项:声明该变量时使用的类型决定
运行时类项:实际赋给该变量的对象决定
实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。
多态存在的三个必要条件:
一、要有继承;
二、要有重写;
三、父类引用指向子类对象。
父类引用生成子类对象,那这个引用只能调用在父类中已经定义过的属性和方法,而对子类自己新定义的属性和方法则不能访问。
class A { public String show(D obj){ return ("A and D"); } public String show(A obj){ return ("A and A"); } } class B extends A{ public String show(A obj){ return ("B and A"); } public String show(B obj){ return ("B and B"); } } class C extends B { } class D extends B { } public class MultiTest{ public static void main(String[] args){ A ab = new B(); B b = new B(); C c = new C(); System.out.println(ab.show(b)); System.out.println(ab.show(c)); System.out.println(b.show(c)); //结果为:B A ,B A ,B B } }
A ab=new B();:ab是一个父类引用,之后执行ab.show(b),这时ab先从父类中查找方法,与之匹配的只有show(A obj)方法,而且发现子类重写了该方法,这时动态链接到子类的show(A obj)方法。
b.show(c);:这里,b中有show(A obj)方法和show(B obj)方法,继承层次为C->B->A,根据重载的最近匹配原则,会调用show(B obj)方法。
相关文章推荐
- Java 中Json的使用
- 区分wsgi、uWSGI、uwsgi、php-fpm、CGI、FastCGI的概念
- GPU 编程学习感悟
- java_XML_比较【转】
- java_XML_Dom4j
- C++模板
- 10. 面向holder编程、自动轮询
- 为什么我们要用struts2,springMVC,spring
- 每天一点matlab——图像与图形的区别
- Upgrade to Python 2.7.9 on Ubuntu 14.04 LTS
- Android_Eclipse的快捷键使用
- java_XML_STAX
- C++如何将N维数组作为参数动态传给方法
- Java中对i = i++的解释
- VFP处理数据的问题和myeclipse导入包的问题
- spring mvc controller间跳转 重定向
- 阿里支付宝java接口
- Person模拟
- 【POI框架实战】——POI导出Excel时设置单元格类型为数值类型
- Java编程基础——java概述及环境变量的配置