《java多形性》ppt课件

《java多形性》ppt课件

ID:40010915

大小:401.50 KB

页数:65页

时间:2019-07-17

《java多形性》ppt课件_第1页
《java多形性》ppt课件_第2页
《java多形性》ppt课件_第3页
《java多形性》ppt课件_第4页
《java多形性》ppt课件_第5页
资源描述:

《《java多形性》ppt课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、6多形性Polymorphism0?什么是多形性Polymorphism?什么是覆盖与过载?如何实现内部类?1上溯造型深入理解覆盖与过载抽象类和方法接口内部类构建器和多形性通过继承进行设计2在java语言中,多形性体现在两个方面:由方法重载实现的静态多形性(编译时多形)和方法重写实现的动态多形性(运行时多形)。1)编译时多形 在编译阶段,具体调用哪个被重载的方法,编译器会根据参数的不同来静态确定调用相应的方法。2)运行时多形 由于子类继承了父类所有的属性(私有的除外),所以子类对象可以作为父类对象使用。程序中凡是使用父类对象的地方,都可以用子类对象来代替。一个对象可以通过引

2、用子类的实例来调用子类的方法。31.上溯造型可将一个对象作为它自己的类型使用,或者作为它的基础类型的一个对象使用。取得一个对象句柄,并将其作为基础类型句柄使用的行为就叫作“上溯造型”——因为继承树的画法是基础类位于最上方。Music.java这里,方法Music.tune()接收一个Instrument句柄,同时也接收从Instrument衍生出来的所有东西。当一个Wind句柄传递给tune()的时候,就会出现这种情况。Instrument里的接口必须存在于Wind中,因为Wind是从Instrument里继承得到的。从Wind向Instrument的上溯造型可能“缩小”那

3、个接口,但不可能把它变得比Instrument的接口还要小。?42.为什么要上溯造型如果让tune()简单地取得一个Wind句柄,将其作为自己的自变量使用,似乎会更加简单、直观得多。但要注意:假如那样做,就需为系统内Instrument的每种类型写一个全新的tune()。假设按照前面的推论,加入Stringed(弦乐)和Brass(铜管)这两种Instrument(乐器)Music2.java52.为什么要上溯造型这样做当然行得通,但却存在一个极大的弊端:必须为每种新增的Instrument类编写与类紧密相关的方法。这意味着第一次就要求多得多的编程量。以后,假如想添加一个象

4、tune()那样的新方法或者为Instrument添加一个新类型,仍然需要进行大量编码工作。此外,即使忘记对自己的某个方法进行过载设置,编译器也不会提示任何错误。这样一来,类型的整个操作过程就显得极难管理,有失控的危险。假如只写一个方法,将基础类作为自变量或参数使用,而不是使用那些特定的衍生类,岂不是会简单得多?也就是说,如果能不顾衍生类,只让自己的代码与基础类打交道,那么省下的工作量将是难以估计的。63.方法调用的绑定观察一下tune()方法:publicstaticvoidtune(Instrumenti){ //...i.play(Note.middleC); }它接

5、收Instrument句柄。所以在这种情况下,编译器怎样才能知道Instrument句柄指向的是一个Wind,而不是一个Brass或Stringed呢?编译器无从得知。为了理解这个问题,这里探讨一下“绑定”这个主题。73.方法调用的绑定将一个方法调用同一个方法主体连接到一起就称为“绑定”(Binding)。若在程序运行以前执行绑定(由编译器和链接程序,如果有的话),就叫作“早期绑定”。上述程序最令人迷惑不解的地方全与早期绑定有关,因为在只有一个Instrument句柄的前提下,编译器不知道具体该调用哪个方法。解决的方法就是“后期绑定”,它意味着绑定在运行期间进行,以对象的类

6、型为基础。后期绑定也叫作“动态绑定”或“运行期绑定”。83.方法调用的绑定要实现后期绑定,同时必须提供一些机制,可在运行期间判断对象的类型,并分别调用适当的方法。也就是说,编译器此时依然不知道对象的类型,但方法调用机制能自己去调查,找到正确的方法主体。不同的语言对后期绑定的实现方法是有所区别的。但我们可以这样认为:它们都要在对象中安插某些特殊类型的信息。Java中绑定的所有方法都采用后期绑定技术,除非一个方法已被声明成final。这意味着我们通常不必决定是否应进行后期绑定——它是自动发生的。它可有效地“关闭”动态绑定,编译器就可为final方法调用生成效率更高的代码。93.

7、方法调用的绑定经典的“形状”的例子。形状例子有一个基础类,名为Shape;另外还有大量衍生类型:Circle(圆形),Square(方形),Triangle(三角形)等等。这里,很容易理解“圆属于形状的一种类型”等概念。下面继承图展示了它们的关系:103.方法调用的绑定上溯造型可用下面这个语句简单地表现出来:Shapes=newCircle();在这里,创建了Circle对象,并将结果句柄立即赋给一个Shape。这表面看起来似乎属于错误操作(将一种类型分配给另一个),但实际是完全可行的——因为按照继承关系,Circ

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

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

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