Polymorphism(多态)的理解

  多态 也称为后期绑定 (late binding),只要不是后期绑定就不是多态!

  所谓绑定 就是建立method call(函数调用)和method body(函数本体)的关联。绑定分为先期绑定和后期绑定,发生在程序执行之前的是先期绑定,过程式语言一定是先期绑定的;绑定动作在执行期才根据对象型别进行的是后期绑定 。Java中的所有函数除了被声明为final和satatic外,皆为后期绑定,而且都是会自动发生的,可以这么理解“发送消息给某个对象,让该对象自行找到应该做的事就好了”。

  显然可以推出成员变量和静态函数是不具有多态性的,因为它们在编译时绑定的。

  说到多态我们不得不说两个概念 向上转型 (upcasting)和向下转型 (downcasting)

  举个很简单的例子去理解多态   向上转型   向下转型

多      态 猫科动物有老虎 、狮子、猫等等

向上转型 老虎有猫科动物共有的特征(子类一定能转成父类类型)

向下转型 猫科动物不一定有老虎的本领(父类不一定能转成子类类型,有可能抛出异常)

package Polymorphism;

class Tiger extends Catamount {
	void wow() {
		System.out.println("Tiger WOW");
	};

	void forestLife() {
		System.out.println("Tiger is the king of the forest!");
	};
};

class Lion extends Catamount {
	void wow() {
		System.out.println("Lion WOW");
	};

	void glasslandLife() {
		System.out.println("Lion is the king of grassland!");
	};
};

class Cat extends Catamount {
	void wow() {
		System.out.println("Cat WOW");
	};

	void domesticate() {
		System.out.println("Cats is a human pet!");
	};
};

public class Catamount {
	void wow() {
		System.out.println("Catamount will be called!");
	}

	public static void main(String[] args) {
		Catamount c[] = { new Catamount(), new Tiger(), new Lion(), new Cat() };
		c[1].wow();// upcasting
		c[2].wow();// upcasting
		c[3].wow();// upcasting
		((Tiger) c[1]).forestLife();// downcasting
//		((Tiger) c[0]).forestLife();// Exception thrown    屏蔽了!
		((Lion) c[2]).glasslandLife();// downcasting
		((Cat) c[3]).domesticate();// downcasting

	}
}

 

Tiger WOW
Lion WOW
Cat WOW
Tiger is the king of the forest!
Lion is the king of grassland!
Cats is a human pet!

   注:Java里的每个转型动作都会被检查,所以即使看起来不过是圆括号表示的一般转型动作,执行时期却会加以检查以确保它的确是你所认知的型别,如果转型不成功,你便会受到ClassCastException,这一动作被称为“执行期型别辨别(run-time type identification,RTTI)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值