您的位置:首页 > 编程语言 > Java开发

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)
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));

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: