Java中多态的粗浅见解

面向对象有三大特性:封装、继承、多态。
     本文简单谈一下对多态的粗浅理解。实现多态的技术称为动态绑定,是指在执行期间,根据引用对象的实际类型,调用相应的方法。也是就说,多态是运行期的行为,不是编译期的行为。
    多态存在的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));

	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值