Java 多态性解析

       Java引用变量有两个类型:一个是编译时类型,一个是运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,就可能出现所谓的多态。

package 多态;
class PClass{
	public int  age=40;
	public void test(){
		System.out.println("这是父类的test方法");
	}
}
public class CClass extends PClass {
     public int age=18;
     public void test(){
    	 System.out.println("这是子类的test方法");
     }
     public static void main(String[] args) {
		PClass plo=new CClass();
		plo.test();
		System.out.println(plo.age);
		
	}
}

      

        PClass plo=new CClass();由这条语句可以看出,plo变量有一定的特殊性,它在编译时的类型是PClass,而运行时类型却是CClass,当调用test()方法(PClass类中定义了该方法,子类CClass覆盖了父类的方法)时,实际执行的是CClass类中覆盖后的test()方法,这就出现了多态。

        也就是说,当运行时调用该引用变量(也就是程序中的plo)的方法时,其方法行为总是表现出子类方法的行为特征,而不是父类方法的行为特征,这就可能出现:相同类型的变量、调用同一个方法时呈现出多种不同的行为特征,这就是多态。

        与方法不同的是,对象的实例变量则不具备多态性,比如上面的程序中输出的age变量时父类的age,而非子类。

 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值