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

上传人:牧羊曲112 文档编号:5436256 上传时间:2023-07-06 格式:PPT 页数:20 大小:854.50KB
返回 下载 相关 举报
java面向对象编程-继承与多态.ppt_第1页
第1页 / 共20页
java面向对象编程-继承与多态.ppt_第2页
第2页 / 共20页
java面向对象编程-继承与多态.ppt_第3页
第3页 / 共20页
java面向对象编程-继承与多态.ppt_第4页
第4页 / 共20页
java面向对象编程-继承与多态.ppt_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《java面向对象编程-继承与多态.ppt》由会员分享,可在线阅读,更多相关《java面向对象编程-继承与多态.ppt(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 tempSpeed=speed-p_speed;if(t

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

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

5、继承问题引刃而解,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(tempSpeed=0)speed=tempSpeed;,public class Bus extends CarBase public int max_Passenger=35;/只需

6、包含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;/保存氮气的剩余量/使用氮气来让汽车加速的方法 public void speedUpUsingN(int p_amout)/省略/增加氮气 public void addN(int p_amout)/省略,子类继承了父类的属性和方法,继承

7、,继承的语法格式:子类类名+extends+父类类名Java在创建一个子类的对象的同时,也创造了其父类的一个对象子类继承了父类的属性与方法,但唯一没有直接继承的是父类的构造方法Java中的单继承万类之组类所有类都继承自Object,伪装 与 反伪装,public class AutoConversion public static void main(String args)SportsCar sportsCar=new SportsCar();/(1)创建了一个SportsCar类的对象 CarBase carBase=sportsCar;/(2)使用强制类型转换 carBase.speed

8、Up(77);/(3)使用carBase调用speedUp方法 System.out.println(carBase.speed的值为:+carBase.speed);/(4)/输出speed属性的值 System.out.println(sportsCar.speed的值为:+sportsCar.speed);sportsCar.speedUpUsingN(77);/(5)使用sportsCar调用speedUpUsingN方法 System.out.println(carBase.speed的值为:+carBase.speed);/(4)/输出speed属性的值 System.out.pr

9、intln(sportsCar.speed的值为:+sportsCar.speed);,伪装 与 反伪装,public class ForceConvertion public static void main(String args)SportsCar SportsCar=new SportsCar();/(1)CarBase base=SportsCar;/(2)System.out.println(尝试将base引用强制类型转换为SportsCar类的引用);SportsCar converted=(SportsCar)base;/(3)System.out.println(转换成功!)

10、;System.out.println(使用converted调用addN方法);converted.addN(45);/(4)System.out.println(converted.nAmount的值为:+converted.nAmount);AutoConversion asdf=null;System.out.println(使用converted给Object类的引用objCar赋值);Object objCar=converted;/(5)System.out.println(将Object类引用强制类型转换为CarBase类引用);CarBase base2=(CarBase)o

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

12、,以缩短加速所需时间。,当方法不再通用,覆盖是如何执行的?,必须找到符合方法签名的方法,这个和方法名、方法形参和方法实参之间的类型匹配等都有关系,这个详细的过程在学习方法的时候已经讲述过,这里不再赘述。Java平台会首先根据在对象的实际所属的类中寻找符合方法签名的方法,如果找不到,则去它的父类中寻找符合方法签名的方法,如果再找不到,则去它父类的父类中寻找符合方法签名的方法,一直到找到为止。找到后,就执行找到的方法。,形参&实参,多态:Overload&Override,什么是Overload?类中的两个或者多个方法,如果它们有相关的方法名,但是却又不同的方法签名,那么这几个方法就是重载。为什么

13、使用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)方法被调用了);this.car=bus;,重载方法的调用,public class UseOverLoad public static void main

14、(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.setCar(bus);useCar.setCar(eBus);,public class UseOverLoadII public static void main(String arg

15、s)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.setCar(base);,当继承被引入到重载的参数中时,决定函数重载的哪个方法被调用的是实参。这里的实参指的是引用的类型,而不是引用指向对象的类型,Class类与instanceof运算符,Class是不是一个关键字instanceof对象的引用 instanceof 类名,面向对象三大特性,类就是封装,封装了属性与方法。它是一种思想,其核心就是“暴露出必要的内容给外部用,而对于内部细节,使用者不用去关心”,提供了一种可以让我们以一种“与现实中的逻辑相近的方式”构建自己的类和代码。,伴随继承而来,包括重载与覆盖。让“具体执行哪个方法”的问题上给予编程者足够大的灵活性。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号