Java中多态的粗浅见解

来源:互联网 发布:python字符串转数字 编辑:程序博客网 时间:2024/05/21 18:39
面向对象有三大特性:封装、继承、多态。
    本文简单谈一下对多态的粗浅理解。实现多态的技术称为动态绑定,是指在执行期间,根据引用对象的实际类型,调用相应的方法。也是就说,多态是运行期的行为,不是编译期的行为。
    多态存在的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));}}


0 0