java面向对象编程-继承与多态

上传人:shaoy****1971 文档编号:114325054 上传时间:2019-11-10 格式:PPT 页数:20 大小:2.74MB
返回 下载 相关 举报
java面向对象编程-继承与多态_第1页
第1页 / 共20页
java面向对象编程-继承与多态_第2页
第2页 / 共20页
java面向对象编程-继承与多态_第3页
第3页 / 共20页
java面向对象编程-继承与多态_第4页
第4页 / 共20页
java面向对象编程-继承与多态_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《java面向对象编程-继承与多态》由会员分享,可在线阅读,更多相关《java面向对象编程-继承与多态(20页珍藏版)》请在金锄头文库上搜索。

1、准备上课了!,Java 面向对象高级编程,讲师:李志成,继承与 多态,目录,类、对象与引用,什么是类(Class)? 类是具有相同特性和行为的对象集合;是一种抽象,它把一类物体的特征抽象出来,通过适当的数据类型表示。 什么是对象(Object)? 与类相对而言,类是抽象,对象就是具体。例如:人就是一个抽象类,而你、我、他就是一个人的对象。 什么是引用(reference)? 对象的名字,用来操作对象。同一对象可以有多个应用吗?,为什么 需要类?,Class:n.班级;上课;等级 阶级;种类 Object:n.物体;客体 对象;目的 目标,目录,面向对象三大特性,封装: 类就是封装,封装了属性与

2、方法。它是一种思想,其核心就是“暴露出必要的内容给外部用,而对于内部细节,使用者不用去关心”,立即进入面向对象的继承与多态世界,一切从汽车开始,public class Car public int speed; /in变量,表示汽车沫磨 public String name; /表示汽车名字 public String color; /表示汽车颜色 public void speedUp(int p_speed) if (p_speed 0) speed += p_speed; public void slowDown(int p_speed) if (p_speed 0) int temp

3、Speed = speed - p_speed; if (tempSpeed = 0) speed = tempSpeed; ,系统升级:需要支持公交汽车。 业务点: 1.包含普通汽车所有属性与行为; 2.增加“最大核载人数”、“当前旅客总数”属性; 3.增加“上客”、“下客”行为,1.增加一个新类 2.修改原来的类(选用此方式),解决,修改原来的Car类,public class Car /省略 public boolean isBus; / 下面是专门为公共汽车增加的三个属性 public int max_Passenger = 35; public int current_Passeng

4、er = 0; / 专门为公共汽车增加的方法,完成旅客上车的功能 public boolean getOnBus(int p_amout) if (isBus) /省略 return false; / 专门为公共汽车增加的方法,完成旅客下车的功能 public boolean getDownBus(int p_amout) if (isBus) /省略 return false; ,系统升级:需要支持跑车。 业务点: 1.包含普通汽车所有属性与行为; 2.增加“氮气含量” 属性; 3.增加“使用氮气加速”行为,1.增加一个新类 2.修改原来的类,解决,一类车 一个类,一类车 一个类,问题提出:

5、 1.一个类表示所有的汽车类型,需要穷举所有汽车的属性与方法; 2.一个类表示一个汽车类型,当需要修改的时候需要修改所有的类。,继承,使用继承问题引刃而解,public class CarBase public int speed; public String name; public String color; public int maxSpeed = 0; int tempSpeed = 0; if (p_speed 0) tempSpeed = speed + p_speed; if (tempSpeed 0) int tempSpeed = speed - p_speed; if (

6、tempSpeed = 0) speed = tempSpeed; ,public class Bus extends CarBase public int max_Passenger = 35;/ 只需包含Bus特有的属性 public int current_Passenger = 0; / 只需包含Bus特有的方法 public boolean getOnBus(int p_amout) if (isBus) /省略 return false; ,public class SportsCar extends CarBase public int nAmount = 90;/ 保存氮气的剩

7、余量 / 使用氮气来让汽车加速的方法 public void speedUpUsingN(int p_amout) /省略 / 增加氮气 public void addN(int p_amout) /省略 ,子类继承了父类的属性和方法,继承,继承的语法格式: 子类类名 + extends + 父类类名 Java在创建一个子类的对象的同时,也创造了其父类的一个对象 子类继承了父类的属性与方法,但唯一没有直接继承的是父类的构造方法 Java中的单继承 万类之组java.lang.Object类 所有类都继承自Object,伪装 与 反伪装,public class AutoConversion p

8、ublic static void main(String args) SportsCar sportsCar = new SportsCar(); / (1)创建了一个SportsCar类的对象 CarBase carBase = sportsCar;/ (2)使用强制类型转换 carBase.speedUp(77);/ (3)使用carBase调用speedUp方法 System.out.println(“carBase.speed的值为:“ + carBase.speed);/ (4) / 输出speed属性的值 System.out.println(“sportsCar.speed的值

9、为:“ + sportsCar.speed); sportsCar.speedUpUsingN(77);/ (5)使用sportsCar调用speedUpUsingN方法 System.out.println(“carBase.speed的值为:“ + carBase.speed);/ (4) / 输出speed属性的值 System.out.println(“sportsCar.speed的值为:“ + sportsCar.speed); ,伪装 与 反伪装,public class ForceConvertion public static void main(String args) S

10、portsCar SportsCar = new SportsCar();/ (1) CarBase base = SportsCar;/ (2) System.out.println(“尝试将base引用强制类型转换为SportsCar类的引用“); SportsCar converted = (SportsCar) base;/ (3) System.out.println(“转换成功!“); System.out.println(“使用converted调用addN方法“); converted.addN(45);/ (4) System.out.println(“converted.n

11、Amount的值为:“ + converted.nAmount); AutoConversion asdf = null; System.out.println(“使用converted给Object类的引用objCar赋值“); Object objCar = converted;/ (5) System.out.println(“将Object类引用强制类型转换为CarBase类引用“); CarBase base2 = (CarBase) objCar;/ (6) System.out.println(“将Object类引用强制类型转换为SportsCar类引用“); SportsCar

12、 sports2 = (SportsCar) objCar;/ (7) ,遵守语法 正确转换,一个子类的引用可以用来给父类引用赋值,而无需强制转换; 引用类型决定可以调用对象的哪个方法,访问对象哪些属性 子类引用=(子类)父类引用,继承后的覆盖(Override),系统升级: 1.为了乘客的安全,公共汽车需要在减速的时候保证一次减速的值不能超过某个限定值。以内,因为如果速度降得太快,站着的乘客可能因为惯性而跌倒; 2.对于跑车的加速方法,可以设定加速的时候就使用指定数量的氮气,以缩短加速所需时间。,当方法不再通用,public class SportsCar extends CarBase /

13、省略 public void speedUp(int p_speed) / (1)SportsCar类特有的speedUp方法 /省略 /省略 ,覆盖是如何执行的?,必须找到符合方法签名的方法,这个和方法名、方法形参和方法实参之间的类型匹配等都有关系,这个详细的过程在学习方法的时候已经讲述过,这里不再赘述。 Java平台会首先根据在对象的实际所属的类中寻找符合方法签名的方法,如果找不到,则去它的父类中寻找符合方法签名的方法,如果再找不到,则去它父类的父类中寻找符合方法签名的方法,一直到找到为止。找到后,就执行找到的方法。,形参 & 实参,多态:Overload & Override,什么是Ov

14、erload? 类中的两个或者多个方法,如果它们有相关的方法名,但是却又不同的方法签名,那么这几个方法就是重载。 为什么使用Overload? 让类变得更灵活。,public class UseCar public CarBase car; public void setCar(CarBase car) System.out.println(“setCar(CarBase)方法被调用了“); this.car = car; public void setCar(ElectronicBus bus) System.out.println(“setCar(ElectronicBus)方法被调用了“

15、); this.car = bus; ,重载方法的调用,public class UseOverLoad public static void main(String args) UseCar useCar = new UseCar(); CarBase base = new CarBase(); SportsCar sports = new SportsCar(); Bus bus = new Bus(); ElectronicBus eBus = new ElectronicBus(); useCar.setCar(base); useCar.setCar(sports); useCar.

16、setCar(bus); useCar.setCar(eBus); ,public class UseOverLoadII public static void main(String args) UseCar useCar = new UseCar(); CarBase base = new CarBase(); useCar.setCar(base); base = new SportsCar(); useCar.setCar(base); base = new Bus(); useCar.setCar(base); base = new ElectronicBus(); useCar.se

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 职业教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号