第3章 面向对象高级编程(32)-回顾.ppt_第1页
第3章 面向对象高级编程(32)-回顾.ppt_第2页
第3章 面向对象高级编程(32)-回顾.ppt_第3页
第3章 面向对象高级编程(32)-回顾.ppt_第4页
第3章 面向对象高级编程(32)-回顾.ppt_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、Java面向对象程序设计,Java多态性-回顾,多态的概念,所谓多态,是指一个程序中同名的不同方法共存的情况 面向过程中过程和函数名是不能重名的 面向对象中“重名”现象可以提高程序的抽象度和简洁性,方法覆盖实现的多态,子类中定义与父类中同名,并且参数类型和个数也相同的方法,被称为方法的覆盖(override)。 这些方法的定义后,在子类的实例化对象中,父类中继承的这些同名方法将被隐藏。 覆盖方法的区分:只需在调用方法时指明调用的是哪个类的方法 class Employee public void raiseSalary(float proportion) salary+=salary*prop

2、ortion; class Manager extends Employee public void raiseSalary(float proportion) salary+=salary*(proportion+0.1); class TemporaryEmployee extends Employee public void raiseSalary(float proportion) salary+=salary*(proportion*0.5); Employee e=new Employee(); e.raiseSalary(0.1); Manager m=new Manager()

3、; m.raiseSalary(0.1); TemporaryEmployee t=new TemporaryEmployee (); t.raiseSalary(0.1);,方法重载实现的多态,在同一个类中定义的同名方法,被称为方法的重载(overload) 重载方法的区分:一般采用不同的形式参数列表,包括形式参数的个数、类型、顺序的不同,来区分重载的方法。 例如TicketSeller类中的构造方法 public TicketSeller (int ticketCost) public TicketSeller(int ticketCost,int tickets) TicketSelle

4、r t1=new TicketSeller(100); TicketSeller t2=new TicketSeller(100,1000);,方法重载实现的多态,例如PrintStream类中的println方法 public void println(); public void println(String str); public void println(int x); public void println(double x); System.out.println(); System.out.println(“Hello World!”); System.out.println(

5、3.1415926); System.out.println(65536);,对象引用的多态,(1)子类对象可以作为父类的对象来使用 class Vehicle /父类 class Car extends Vehicle class Bus extends Vehicle class Truck extends Vehicle Vehicle vehicle1=new Car(“小轿车”,”宝马”,56); Vehicle vehicle2=new Bus(“大客车”,”奔驰”,123,30); Vehicle vehicle3=new Truck(“货车”,”吉瑞”,67,15);,对象引用

6、的多态,(2)父类对象不能作为其某一个子类的对象 Car car=new Vehicle(); /错误,不兼容的类型 (3)如果一个方法的形式参数定义的是父类对象 ,那么调用这个方法时,可以使用子类对象作为实际参数 例如:VehicleData类中定义addVehicle方法 public void addVehicle(Vehicle aVehicle)vehicles.add(aVehicle); VehicleData vList=new VehicleData(); Car car=new Car(小轿车,宝马,56); Bus bus=new Bus(大巴车,奔驰,123,30);

7、Truck truck=new Truck(货车,吉瑞,67,15); vList.addVehicle(car); vList.addVehicle(bus); vList.addVehicle(truck);,对象引用的多态,通过父类变量可以让一个子类的对象做父类对象可以做的事情 通过父类变量不能让子类对象做父类对象不不能做的事情,即使子类对象有这样的功能 Vehicle vehicle1=new Car(“小轿车”,”宝马”,56); vehicle1.printInfo();/这个调用是正确的 在Car类中增加一个父类没有的方法printCar vehicle1.printCar();

8、/这个调用是错误的,对象引用的多态,(4)如果父类对象引用指向的实际是一个子类对象,那么这可父类对象的引用可以用强制类型转换转化成子类对象的引用 Vehicle vehicle1=new Car(“小轿车”,”宝马”,56); Car car=(Car)vehicle1; /以下类型转换是错误的 Vehicle vehicle1=new Vehicle(“小轿车”,”宝马”,56); Car car=(Car)Vehicle1;,对象引用的多态,由于对象引用具有多态性,即可以是父类的引用,也可以是子类的引用,那么在程序中能否判断出它究竟是哪类对象的引用呢? 通过运算符 instanceof 实现 Vehicle obj=new Vehicle(“小轿车”,”宝马”,56); obj instanceof Vehicle

温馨提示

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

评论

0/150

提交评论