关于Java中的动态多态


-----------------------------------------------------------------------------------------题记


关于动态多态的一些测试和个人的理解。


-----------------------------------------------------------------------------------------代码(附详细注释)

package polymorphic.dynamic;

public class Father {

	public String name = "Father";
	
	public static void main(String[] args) {

		/*
		 * 动态多态:
		 * 
		 * 指在调用方法后,在运行的时候才能决定到底是调用父类的方法还是子类的方法,
		 * 
		 * 若子类没有重写父类的方法,则调用父类的方法,
		 * 
		 * 若子类重写父类的方法,则调用子类的方法。
		 */
		
		//----------------动态多态(【子对象】的【父引用】强转【子引用】  --代码片段1)----------------
		
		/*
		 * 多态的作用:把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
		 * 
		 * eg:马和牛都继承动物(即都属于动物),那么有:
		 * 
		 * 动物 animal1 = new 牛();
		 * 
		 * 动物 animal2 = new 马();
		 * 
		 * 若有参数列表,如:public void function(动物 animal){},
		 * 
		 * 那么animal1和animal2都可以放入该参数列表,因为牛和马都是动物。
		 * 
		 * 另,new不同类的对象的原因就是要使用其中的不同的成员方法和成员变量(因为子类可能发生方法的重写),
		 * 
		 * 所以有animal1.run(),则调用牛重写的的run()(若牛类重写run()),而animal2.run(),调用马重写的run()(若马类重写run()),
		 * 
		 * 即,同一个类中的方法(都是由父类继承过来的方法)表现出来不同的状态(功能),这就是动态多态。
		 * 
		 */
		
		Father father1 = new Son();
		
		//由多态产生强转
		
		/*
		 * 在使用过程中将其进行强转的原因:该引用是对父类的成员变量和成员方法的引用,故无法引用子类扩展的成员变量或者方法。
		 */
		
		Son son1 = (Son) father1;
		
		System.out.println(son1.name);

		
		//----------------运行异常1(【父对象】的【父引用】强转【子引用】  --代码片段2)----------------
		
		Father father2 = new Father();
		
		/*
		 * father2是对Father类的引用,son2是对Son类的引用,
		 * 
		 * son2可以引用到更多的成员方法和成员变量(子类扩展的成员方法和成员变量),
		 * 
		 * 而son2即将所指向的对象(即father2所指向的对象)是不能满足其引用所能够调用的全部成员方法和成员变量。
		 */
		
		Son son2 = (Son) father2;

		
		//----------------运行异常2(【子对象间】的【子引用】相互强转  --代码片段3)----------------
		
		Father father3 = new Daughter();
		
		/*
		 * 同理,daughter和son相对父类扩展的成员变量或方法可能不一样,故无法相互引用。
		 */
		
		Son son3 = (Son) father3;
		
	}
	
}

class Son extends Father {
	
	public String name = "son";
	
}

class Daughter extends Father {
	
	public String name = "daughter";
	
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值