JAVA特性【多态】详解.ppt

JAVA特性【多态】详解.ppt

ID:56527612

大小:100.00 KB

页数:17页

时间:2020-06-27

JAVA特性【多态】详解.ppt_第1页
JAVA特性【多态】详解.ppt_第2页
JAVA特性【多态】详解.ppt_第3页
JAVA特性【多态】详解.ppt_第4页
JAVA特性【多态】详解.ppt_第5页
资源描述:

《JAVA特性【多态】详解.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、多态(polymorphism)多态的运行机制所谓“绑定(binding)”,就是建立methodcall(函数调用)和methodbody(函数本体)的关联。如果绑定动作发生于程序执行前(由编译器和连接器完成),称为“先期绑定”。对于面向过程的语言它们没有其他选择,一定是先期绑定。比如C编译器只有一种methodcall,就是先期绑定。(C++有先期联编和后期联编)当有多态的情况时,解决方法便是所谓的后期绑定(latebinding):绑定动作将在执行期才根据对象型别而进行。后期绑定也被称为执行期绑定(run-timebinding)或动态绑定(dynamicbin

2、ding)。Java的所有函数,除了被声明为final者,都使用后期绑定。从表面上来理解,将函数声明为final型这样是为了防止他人覆写该函数。但是或许更重要的是,这么做可以“关闭”动态绑定。或者说,这么做便是告诉编译器:动态绑定是不需要的。于是编译器可以产生效率较佳的程序代码。这样说来,动态绑定(后期绑定)的效率不如先期绑定了。多态(polymorphism)Example例如动物园的饲养员能够给各种各样的动物喂食。图1显示了饲养员Feeder、食物Food和动物Animal以及它的子类的类框图。多态图1饲养员Feeder、食物Food和动物Animal以及它的子类

3、的类框图多态可以把Feeder、Animal和Food都看成独立的子系统。Feeder类的定义如下:publicclassFeeder{ publicvoidfeed(Animalanimal,Foodfood){ animal.eat(food); } }以下程序演示一个饲养员分别给一只狗喂肉骨头,给一只猫喂鱼。Feederfeeder=newFeeder(); Animalanimal=newDog(); Foodfood=newBone(); feeder.feed(animal,food);animal=newCat(); food=newFish(); fe

4、eder.feed(animal,food);//给狗喂肉骨头//给猫喂鱼多态Java语言允许某个类型的引用变量引用子类的实例,而且可以对这个引用变量进行类型转换:Animalanimal=newDog(); Dogdog=(Dog)animal;Creaturecreature=animal;如图2所示,如果把引用变量转换为子类类型,称为向下转型,如果把引用变量转换为父类类型,称为向上转型。在进行引用变量的类型转换时,会受到各种限制。而且在通过引用变量访问它所引用的实例的静态属性、静态方法、实例属性、实例方法,以及从父类中继承的方法和属性时,Java虚拟机会采用不同

5、的绑定机制。//向下转型,把Animal类型转换为Dog类型//向上转型,把Animal类型转换为Creature类型多态图2类型转换多态下面通过具体的例子来演示多态的各种特性。在下面的例程中,Base父类和Sub子类中都定义了实例变量var、实例方法method()、静态变量staticVar和静态方法staticMethod(),此外,在Sub类中还定义了实例变量subVar和subMethod()。Sub.java packagepoly; classBase{ Stringvar="BaseVar";staticStringstaticVar="StaticB

6、aseVar";voidmethod(){System.out.println("Basemethod"); } staticvoidstaticMethod(){System.out.println("StaticBasemethod"); } }//实例变量//静态变量//实例方法//静态方法多态publicclassSubextendsBase{ Stringvar="SubVar";//实例变量staticStringstaticVar="StaticSubVar";//静态变量voidmethod(){//覆盖父类的method()方法System.out.

7、println("Submethod"); } staticvoidstaticMethod(){//隐藏父类的staticMethod()方法System.out.println("StaticSubmethod"); }StringsubVar="VaronlybelongingtoSub"; voidsubMethod(){ System.out.println("MethodonlybelongingtoSub"); } publicstaticvoidmain(Stringargs[]){ Basewho=newSub();//who被声明

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。