Java程序设计项目化教程-5.3.1多态脚本_第1页
Java程序设计项目化教程-5.3.1多态脚本_第2页
Java程序设计项目化教程-5.3.1多态脚本_第3页
Java程序设计项目化教程-5.3.1多态脚本_第4页
Java程序设计项目化教程-5.3.1多态脚本_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

多态是面向对象的三大特征之一。多态指的是在程序中允许方法出现重名的现象。多态使程序具有良好的扩展性。对面向对象而言,多态可以分为编译时多态和运行时多态。其中编译时多态也叫静态多态,主要指方法重载,它是根据参数列表的不同来区分不同的方法。而运行时多态,也叫动态多态,它是通过动态绑定来实现的,主要是指方法重写。5.3.1多态1.方法的重载编译多态是指程序编译过程中出现的多态,可以通过方法重载实现。Java在编译时可以根据实际参数的数据类型、个数和顺序决定执行重载方法中的哪一个。5.3.1多态在Java中,允许同一类中的多个方法可以有相同的方法名称,但这些方法具有不同的参数列表,这就是方法重载(overload)。如果一个类中多个方法名称相同,参数列表也相同,只是返回值类型不同,那么不能称为方法重载,会出现编译错误。5.3.1多态例5-10实现方法重载packagechapter5;publicclassexample5_10{publicstaticvoidmain(String[]args){ints1=sum(1,2);//求和方法的调用

ints2=sum(1,2,3);//求和方法的调用

doubles3=(double)sum(1.0,2.0);//求和方法的调用

System.out.println("sum1="+s1);//输出求和结果

System.out.println("sum2="+s2);//输出求和结果

System.out.println("sum3="+s3);//输出求和结果5.3.1多态}publicstaticintsum(intx,inty){//实现两个整数相加

returnx+y;}publicstaticintsum(intx,inty,intz){//实现三个整数相加

returnx+y+z;}publicstaticdoublesum(doublex,doubley){//实现两个小数相加

returnx+y;}}程序运行结果:5.3.1多态2.构造方法的重载如果在一个类体中定义了多个具有不同参数列表的同名构造方法,这就是构造方法的重载。在创建对象时,可以通过调用不同的构造方法来为不同的成员变量赋值。5.3.1多态(3)对于父类中的非静态方法,子类能够继承并重写,但子类在重写父类方法时,不允许将同名方法重新定义为静态方法,仍然要保持方法类型为非静态类型。5.3.1多态例5-11构造方法的重载packagechapter5;classPerson{Stringname;intage;Person(Stringname){//一个参数的构造方法

=name;}Person(Stringname,intage){//两个参数的构造方法5.3.1多态5.3.1多态=name;this.age=age;}voidsay(){System.out.println("hello,mynameis"+name+",thisyear"+age+"old");}}publicclassexample5_11{publicstaticvoidmain(String[]args){p1=newPerson("tom");//调用一个参数构造方法

p1.say();Personp2=newPerson("lisi",22);//调用两个参数的构造方法

p2.say();}}程序运行结果:3.方法的重写运行时多态指在程序运行过程中出现的多态性,可以通过方法重写实现。5.3.1多态子类继承了父类,当通过父类对象调用某个方法时,到底系统是调用父类的方法还是子类的方法?这无法在编译时确定,需要在系统运行过程中根据实际对象类型来确定,所以称之为运行时多态。5.3.1多态通过继承,子类会自动拥有父类中定义的成员方法。子类也可以增加自己的成员方法。子类还可以对从父类继承过来的成员方法进行修改,从而满足子类自身的需要,也就是对父类的成员方法进行重写,简称方法重写。5.3.1多态5.3.1多态例5-12方法重写packagechapter5;abstractclassAnimal{//定义抽象类

abstractvoidshou();//定义抽象方法

}classChicextendsAnimal{//定义Chic类继承Animal抽象类

publicvoidshou(){

System.out.println("叽叽叽…");}classDukextendsAnimal{//定义Duk类继承Animal抽象类

publicvoidshou(){

System.out.println("嘎嘎嘎…");5.3.1多态}}publicclassexample5_12{//定义主类

publicstaticvoidmain(String[]args){Animala1=newChic();//创建Chic对象,使用Animal类型的变量a1引用

Animala2=newDuk();//创建Duk对象,使用Animal类型的变量a2引用

a1.shou();a2.shou();}}}程序运行结果:Java规定,对于重写的方法,系统根据运行时实际调用的对象类型来决定选择调用哪一个重写的方法,这就是运行时多态。5.3.1多态(1)类和类之间有继承关系。(2)子类对父类的方法进行了重写。(3)存在父类引用子类对象。5.3.1多态4.对象类型转换子类类型和父类类型之间的转换,和基本的数据类型转换一样。类对象之间也可以进行类型转换,转换可分为向上转型和向下转型两种。5.3.1多态5.3.1多态(1)向上转型向上转型指父类引用子类对象,也就是将子类对象当作父类对象使用。这种操作存在隐式转换,也就是隐式将子类对象转换为父类对象类型,不需要显式地强制转换,程序会自动完成。对象类型的转换格式如下:父类类型父类对象=子类实例;5.3.1多态

例5-13对象的向上转型packagechapter5;classAnimal{//定义类Animalpublicvoidshou(){System.out.println("叽叽…");}}classDukextendsAnimal{//定义Duk类publicvoidshou(){System.out.println("嘎嘎…");}5.3.1多态publicvoideat(){System.out.println("吃虫子…");}}publicclassexample5_13{//定义主类publicstaticvoidmain(String[]args){Dukduk=newDuk();//创建Duk对象Animalat=duk;//将Duk对象向上转型为Animal类型的对象atat.shou();//使用对象at调用方法shou()}}程序运行结果:5.3.1多态(2)向下转型向下转型指子类引用父类对象,也就是将父类对象当子类对象使用,必须指明要转换的子类类型。对象类型的转换格式如下:父类类型父类对象=子类实例;子类类型子类对象=(子类)父类对象;5.3.1多态例5-14对象的向下转型

packagechapter5;classAnimal{//定义类Animalpublicvoidshou(){System.out.println("叽叽…");}}classDuk1extendsAnimal{//Duk1类publicvoidshou(){System.out.println("嘎嘎…");}publicvoideat(){5.3.1多态System.out.println("吃虫子…");}}publicclassexample5_14{//定义主类publicstaticvoidmain(String[]args){Animalat=newDuk1();//发生了向上转型,子类

父类Duk1duk=(Duk1)at;//发生了向下转型duk.shou();duk.eat();}}程序运行结果:5.3.1多态(3)instanceof运算符向下转型必须确保父类对象是子类的一个实例,否则程序将抛出异常。为了确保向下转型不抛出异常,java提供了instanceof运算符。对象名instanceof类名instanceof返回一个布尔值来判断这个对象是否是这个特定类或者是它的子类的一个实例。如果是true,那么对象为这个类或其子类的一个实例。5.3.1多态例5-15使用instanceof运算符实现转型

packagechapter5;classAnimal{publicvoidrun(){System.out.println("动物跑…");}}classCatextendsAnimal{publicvoidrun(){System.out.println("跳跃跑…");}publicvoideat(){System.out.println("吃老鼠…");5.3.1多态

}}publicclassexample5_15{publicstaticvoidmain(String[]args){Animala1=newCat();

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论