Java中多态的粗浅见解
2016-03-02 10:58
351 查看
面向对象有三大特性:封装、继承、多态。
本文简单谈一下对多态的粗浅理解。实现多态的技术称为动态绑定,是指在执行期间,根据引用对象的实际类型,调用相应的方法。也是就说,多态是运行期的行为,不是编译期的行为。
多态存在的3个必要性:
1、要有继承;Child继承Parent类;
2、要有重写;Child类中存在与Parent类同名同参数的方法;
3、父类的引用指向子类对象: Parent p = new Child();
当使用多态调用方法时,程序首先会检查父类中有没有该方法,如果没有,就会报错,如果存在可调用的方法,程序会转入子类的该方法的重写方法。
多态中也会涉及到类型的类型转换。
1、向上类型转换:子类的类型转换为父类的类型,不需要指定,即不需要(Parent)。
2、向下类型转换:父类的类型转换为子类的类型,需要指定,即需要(Child)。
实例(java.HighCode.DuoTai)
本文简单谈一下对多态的粗浅理解。实现多态的技术称为动态绑定,是指在执行期间,根据引用对象的实际类型,调用相应的方法。也是就说,多态是运行期的行为,不是编译期的行为。
多态存在的3个必要性:
1、要有继承;Child继承Parent类;
2、要有重写;Child类中存在与Parent类同名同参数的方法;
3、父类的引用指向子类对象: Parent p = new Child();
当使用多态调用方法时,程序首先会检查父类中有没有该方法,如果没有,就会报错,如果存在可调用的方法,程序会转入子类的该方法的重写方法。
多态中也会涉及到类型的类型转换。
1、向上类型转换:子类的类型转换为父类的类型,不需要指定,即不需要(Parent)。
2、向下类型转换:父类的类型转换为子类的类型,需要指定,即需要(Child)。
实例(java.HighCode.DuoTai)
package java.HighCode; 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(B obj){ return ("B and B"); } /*重写了A类的show(A obj)*/ public String show(A obj){ return ("B and A"); } } class C extends B { } class D extends B { } /** * * @ClassName: DuoTai * @Description: 演示多态特性 * @author * @date Mar 2, 2016 10:27:53 AM * */ public class DuoTai { public static void main(String[] args) { B b = new B(); C c = new C(); D d = new D(); A a1 = new A(); System.out.println(a1.show(b)); System.out.println(a1.show(c)); System.out.println(a1.show(d)); System.out.println("----------以下体现多态性-----------"); A a2 = new B(); /*A的引用指向B类*/ /* a2调用show(b)时: * 1、程序会先检查A类中是否有对应的方法(能找到:show(A obj),因为B类(子类)可以隐式转换为A类), * 继续下一步; * 2、程序再到B类中找到对应的方法(能找到:show(A obj),即B类对A类的重写方法。) * */ System.out.println(a2.show(b)); System.out.println(a2.show(c)); System.out.println(a2.show(d)); System.out.println("----------以上体现多态性-----------"); System.out.println(b.show(b)); System.out.println(b.show(c)); System.out.println(b.show(d)); } }
相关文章推荐
- Dagger 2 项目配置错误: error: the import javax.annotation.Generated cannot be resolved
- Zookeeper Api(java)入门与应用(转)
- Spring MVC 文件下载
- Java读取properties配置文件中文乱码解决方案--谷营中西科技软件园---zdd
- spring小知识记载
- java程序性能优化
- Java序列化与反序列化
- 类的static成员变量和成员函数
- 初学者级java.lang.RuntimeException: Unable to instantiate activity ComponentInfo
- maven工程引入的时候提示Missing artifact ...并且项目上有一个感叹号
- java编程思想读书笔记
- java中关于子类实例化时调用父类无参构造方法的问题
- c3p0、dbcp和proxool比较
- Java中JVM的原理
- 4000 JAVA中的abstract理解
- Java的进程与线程
- Eclipse常用开发插件
- Java中extends和implements的区别
- SpringMVC 实现文件上传
- java导出excel