收藏 分销(赏)

《Java程序设计案例教程》教学课件05深入Java面向对象.pdf

上传人:曲**** 文档编号:225271 上传时间:2023-03-08 格式:PDF 页数:47 大小:2.05MB
下载 相关 举报
《Java程序设计案例教程》教学课件05深入Java面向对象.pdf_第1页
第1页 / 共47页
《Java程序设计案例教程》教学课件05深入Java面向对象.pdf_第2页
第2页 / 共47页
《Java程序设计案例教程》教学课件05深入Java面向对象.pdf_第3页
第3页 / 共47页
《Java程序设计案例教程》教学课件05深入Java面向对象.pdf_第4页
第4页 / 共47页
《Java程序设计案例教程》教学课件05深入Java面向对象.pdf_第5页
第5页 / 共47页
点击查看更多>>
资源描述

1、模块5深入Java面向对标了解J a va面向对象程序设计的思想原则。掌握类的结构、定义及对象的创建和使用。掌握成员变量(实例变量、静态变量)和成员常量(实例常量、静态 常量)的定义和使用。掌握成员方法(实例方法、静态方法)的定义和使用,以及成员方法 重载的概念。理解访问控制、数据安全性、包及封装的概念。掌握构造方法(隐式、显式)的定义和使用,以及构造方法重载的概 念。掌握this关键字的使用。了解基本数据类型变量和引用数据类型变量在数值传递上的区别。08技能目标L能够在MyEclipse IDE中定义子类继承父类。2.能够在子类的定义中使用super关键字及重写父类的成员方法。3.能够使用i

2、nstanceof运算符判断对象类型。4.能够在MyEclipse IDE中定义抽象类及定义子类继承抽象父类。5.能够在MyEclipse IDE中定义接口及定义类实现接口。U5回顾与思考在模块4我们以Circle类为例,从类的定义入手,详细分析了类的构成 和使用。如果现在面临一个任务:设计一个扇形类Sector,提供计算扇形 的弧长、周长和面积的方法。我们该如何解决这个问题?一个办法是完整 地定义扇形类Sector,包括所有必需的成员变量及常量、构造方法、成员 方法等。这个办法有个缺点,就是必须重新开始一个类的定义。能否在已 完成工作的基础上(如利用Circle类),适当添加或改动部分代码,

3、完成扇 形类Sector的定义?答案是可行的。但是在编写过程中需要遵循另一个重 要的面向对象设计原则:继承。5.2继承/一继承可以充分利用现有的代码,解决编程过程中代码 冗余的问题,它是实现代码重用的有效手段之一。被继承 的类被称为父类或超类(superclass),由继承而得到的 类被称为子类(subclass)。继承增强了代码的重用性,增强了软件的扩展性。Java中只允许单一继承,不允许多重继承,即每个类只能有一个父类。5.2继承定义子类的基本语法格式如下。Java中通过关键字extends实现子类对父类的继承。5.2继承5.2.1继承的实现【例5】定义类Sector,代表扇形,继承Cir

4、cle 类,提供计算扇形的弧长、周长和面积的方法。首先在ch5.example包中定义父 类Circle。在MyEclipse IDE中,右 击myPro项目下src目录的 ch5.example目录,在弹出的快捷菜 单中执行New 一 Class命令,在弹出的New Java Class”窗口 中输入类名Circle,如图5-1所示。图5-1创建父类Circle5.2继承_5.2.1继承的实现【例5-1】单击Finish按钮,完成父类Circle的创建。文件名为Circle.java,其代码如下。-然后定义子类Sect。%可以手动输入子类Sector的代码,也可 以采用相对规范的操作方式创建

5、Sector类,步骤如下:右击myPro见书本P100-101。项目下src目录的ch5.example目录,在弹出的快捷菜单中执行New-Class命令,在弹出的New Java Class”窗口中输入类名Sector,如图5-2所示。再单击Superclass文本框右边的Browse按钮,打开 Superclass Selection窗口,如图5-3所示。5.2继承5.2.1继承的实现【例5-1】图5-3选择父类Circle图5-2创建子类Sector5.2继承_5.2.1继承的实现【例5-1】在Choose a type”文本框 中输入Cir,在“Matching items 列表框中会

6、显示相应路径下的 Circle类,选择要继承的父类 Circle,单击0K按钮,返回“New Java Class”窗口。此时,在Superclass文本框中出现了所 要继承的父类Circle,如图5-4所小。图5-4完成子类Sector的创建5.2继承_5.2.1继承的实现【例5-1】单击Finish按钮,完成子类 Sector的创建。文件名为 Sector.java,其代码如下。见书本P103-104。最后,编写一个测试类对子类Sector的功能进行检验 o文件名为Example5_l.java,其代码如下。package ch5.example;public class Example5

7、_l/*例 5-1*authorJava程序设计案例教程*version 1.0*/public static void ma in(St ring口 args)Sector s=new Sector(5,20);5.2继承5.2.1继承的实现【例5-1】System.out.printf(%s%.lfn,”该扇形的圆心角为:,s.getCAngle();System,out.printf(%s%.1 fn,该扇形的半径为:,s.getRadiusO);System,out.printf(%s%.lfn,”该扇形的见长为:,s.calArcO);System.out.printf(%s%.1

8、fn,”该扇形的周长为:,s.calPerdmeter();System,out.printf(%s%.lfn,”该扇形的面积为:,s.calArea();)运行结果如下。该扇形的圆心角为:20.0该扇形的半径为:5.0该扇形的弧长为:1.7该扇形的周长为:口.7该扇形的面积为:4.45.2继承_5.2.2 super关键字使用super关键字引用父类构造方法的基本语法格式如下。super(参数列表);其中,参数列表是可选项,参数间用7分隔。使用super关键字引用父类成员变(常)量的基本语法格式如下。super.成员变(常)量名;使用super关键字引用父类成员方法的基变语法格式如下。sup

9、er.方法名(参数列表);其中,参数列表是可选项,参数间用分隔。5.2继承5.2.3 构造方法继承子类中的每一个构造方法都必须继承父类中的某个 且仅一个构造方法。如果子类要继承父类中的某个显式构 造方法,在子类构造方法内的第一行语句必须是super(父类构造方法参数列表。例如,Sector类的构 造方法public Sector(double radius,double cAngle)中 的第一行语句/super(radius);/表示继承父类Circle中的 构造方法public Circle(double radius)o5.2继承_5.2.4 调用父类成员方法和成员变(常)量在子类的构造

10、方法和成员方法中均可以直接通过方法名调用父类成员方法。但是,如果父类的成员方法在子类中已被重写,就不能用子类对象直接调用父 类中的成员方法了,而只能通过语句super.方法名(参数列表);来调用 父类中的成员方法。例如,Sector类的calArc()成员方法中的calPerimeter()方 法来自父类Circle,而不是在Sector类中已重写过的calPerimeter。方法,所以 用s u pe r关键字来表示区别。5.2继承5.2.5 成员方法重写可以明显地看出,从父类Circle中直接继承过来 的成员方法 calPerimeter。和 calArea()在子类 Sector 中已经

11、不能履行其行为职责了。可以在子类中重新定 义从父类中继承过来的成员方法,从而在子类中具有 自己的行为特征,以符合需求。这种成员方法重新定 义称为成员方法重写(覆盖)。5.2继承_5.2.5成员方法重写重写成员方法需要注意以下几个方面。在子类中被重写的成员方法必 须与父类中对应的成员方法有相同 的方法名、参数列表、返回值类型 和static修饰。只能扩大不能缩小重写后的成 员方法的可见性(可见性从小到大 为private、default、protected 和public)o不能在子类中重写父类中用final关键字修饰的成员方法。用final关键字修饰的成员方法被称为最终方法。最终 类中的方法都

12、自动成为最终方法。5.3多态5.3.1 认识多态在4.4节中提及的成员方法重载体现了同一个类中方法的多态性。同一个类中所声明的多个重载方法为相似的功能提供了多种实现。Java编译系统根据参数的数量、类型和次序调用匹配的重载方法。这种多态可称为编译时多态。在继承过程中,子类继承了父类的所有成员。在确保可见性的 前提下,凡父类对象能调用的成员,子类对象也能调用。子类还能 重写父类中的成员方法。5.3多态5.3.2 多态应用父类对象和子类对象之间的引用可以相互转换。父类对象引用了子类对象被称为向上转型。子类对象引用了 父类对象被称为向下转型。5.3多态5.3.2多态应用1.向上转型向上转型的基本语法

13、格式如下。【例52】Circle类对象引用Sector类对象父类型引用变量名二new子类构造 方法名(实际参数列表);package ch5.example;public class Example5_2/*例 5-2*authorJava程序设计案例教程*version 1.0*/public static void main(String口 args)Circle c=new Sector(5,20);把子类对象引用赋给父类对象5.3多态5.3.2多态应用L向上转型005-21运行结果如下。System,out.printf(M%s%.1 fn,该扇形的半径为:”,System,out.p

14、rintf(%s%.1 fn,该扇形的周长为:”,System,out.printf(%s%.1 fn,该扇形的面积为:”,c.setRadius(lO);System.out.printf(%s%.lfn,该扇形的半径为:”,System.out.printf(%s%.1 fn,该扇形的周长为:”,System,out.printf(%s%.1 fn,该扇形的面积为:”,c.getRadius();c.calPerimeter();c.calArea();c.getRadius();c.calPerimeter();c.calArea();)该扇形的半径为:5.0 该扇形的周长为:1L7 该

15、扇形的面积为:4.4 该扇形的半径为:10.0 该扇形的周长为:23.5 该扇形的面积为:17.55.3多态5.3.2多态应用1.向上转型向上转型的应用特点总结如下。(1)向上转型后的对象不能调用子类 中新增的成员。(2)向上转型后的对象可以调 0用子类继承或重写的成员。(3)如果子类重写了父类的某个 0成员方法,那么向上转型后的对象调 用该成员方法时,调用的必定是重写 后的成员方法。5.3多态5.3.2多态应用2.向下转型向下转型的基本语法格式如下。子类型引用变量名二(子类型)new父类构造方法名(实际参数列表);【例53】Sector类对象引用Circle类对象package ch5.ex

16、ample;public class Example5_3/*例 5-3*authorJava程序设计案例教程*version 1.0*/public static void main(String口 args)Sector s=(Sector)new Circle(5);把父类对象引用赋给子类对象5.3多态5.3.2多态应用2.向下转型【例5-3】System.out.printf(%s%.lfn,”该扇形的圆心角为:,s.getCAngle();System.out.printf(%s%.lfn,”该扇形的半径为:,s.getRadius();System.out.printf(%s%.l

17、fn,该扇形的弧长为:,s.calArcC);System.out.printf(n%s%.lfn,该扇形的周长为:”,s.calPerimeter();System.out.printf(%s%.lfn,该扇形的面积为:,s.calArea();上述代码能通过编译,但 是在运行时会抛出 ClassCastException 异常。5.3多态5.3.2多态应用2.向下转型向下转型的应用特点总结如下。(2)向上和向下两次转型后,所得到 的对象是子类类型,可以按子类对象的运 行方式操作子类及父类中的成员。(1)单独一次向下转型编译能通过,,.(3)向下转型必但是运行时会抛出异 须进行强制类型转换。

18、常。5.3多态5.3.2多态应用3.instanceof 运算符Java中引入了 instanceof运算符 用来判断引用变量是否为某类或其子 类类型。instanceof运算的语法格式 为:引用变量名instanceof类名如果引用变量是该类或其子类的 对象,则运算结果为true;反之,则 运算结果为false。【例54】instanceof运算符的使用。文件名为Example5_4.java,其代码如下package ch5.example;public class Example5_4/*例 5-4*authorJava程序设计案例教程*version 1.0*/public stati

19、c void main(String args)C)5.3多态5.3.2多态应用3.instanceof 运算符【例5-4】Circle cl=new Sector(5,20);Sector si=(Sector)cl;运行结果如下。Circle c2=new Circle(5);true true true false true true true trueSector s2=new Sector(5,20);System.out.printf(%bt,clinstanceof Circle);System.out.printf(%bt,clinstanceof Sector);System

20、.out.printf(%bt,c2System,out.printf(%bt,c2System.out.printf(%bt,siSystem,out.printf(%bt,siSystem.out.printf(1%bt,s2System.out.printf(%bt,s2instanceof Circle);instanceof Sector);instanceof Circle);instanceof Sector);instanceof Circle);instanceof Sector);)抽象类不能被实例化,即不能创建抽象类的对象,但是可以在抽象 类中定义构造方法,以及成员变(常

21、)量和成员方法。包含抽象方法的 类一定是抽象类,但是抽象类中可以没有抽象方法。抽象方法是指只有 方法声明而没有具体化的方法。抽象类中的所有抽象方法必须在其非抽 象子类中被重写以具体化,否则子类也必须声明为抽象类。()5.4抽象类_定义抽象类的基本语法格式如下。修饰符abstract class类名extends父类名 成员变量(成员常量);构造方法成员方法抽象方法;定义抽象方法的基本语法格式如下。访问控制修饰符abstract返回值类型 方法名(形式参数列表);54抽象类【例55】定义抽象类Polygon,在其中定义计算多边形周长和面积的抽象方法;再定义 类Rectangle,代表矩形,继承抽

22、象类Polygon,重写其计算多边形周长和面积的抽象方法,以求解矩形的周长和面积。首先,定义抽象类Polygon。文件名为Polygon.java,其代码 如下。然后,定义Rectangle类,可参照图5-3的操作 选择父类Polygon。文件名为Recta ng Ie Java,其代 码如下。_s_见书本P112-113。_4_见书本P113-114。54抽象类_【例55】最后,编写一个测试类对子类Rectangle的功能进行检验。文件名为Example5_5java,其代码如下。package ch5.example;public class Example5_5/*例 5-5*autho

23、rJava程序设计案例教程*version 1.0*/Rectangle r=new Rectangle”,5);double length=r.getLength();double width=r.getWidthC);System.out.printin(长为+length+宽为+width+”的矩形周长为+r.calPerimeter();System.out.printin(长为+length+.+宽为+width+”的矩形面积为+r.calArea();public static void main(String args)()5.4抽象类【例5-5】运行结果如下。长为7.0,宽为5

24、.0的矩形周长为24.0长为7.0,宽为5.0的矩形面积为35.055接口Java只支持单一继承,不支持多强 继承。但是,有些情况下,只有单一继 承是不够的。例如,某两个类都有值得 继承的成员,由于单一继承的限制,这 种操作无法实现。Java中为了弥补单一 继承所带来的缺陷,定义了接口机制以 完善功能。接口规范了实现它的类所应 具有的共同属性和行为。可以把接口看成更为严格的抽象类。(接口中只能包含常量和抽象方法。,定义接口的基本语法格式如下。修饰符interface接口名extends父接口列表public static final数据类型 常量名=初值;public abstract返回值类

25、型方法名(形式参数列表);5.5 接口interface关键字前面的修饰符用来进行访问控制,其只能是两种类型之一:public 型默认型55接口一个类只能继承一个父类,但是可以实现多个接口。一个类可以同时继承一个父类(抽象类)并实现多个接口。子类继承父类同时实现接口的基本语法格式如下。修饰符abstract class 类名extends 父类implements接口列表 类体其中,接口之间用分隔。类如果没有重写接口或抽象父类中的全部抽象方法,则必须定义它为抽象类。55接口_【例56】定义接口 Position,代表图形位置,提供设置及获取平面图形坐标的抽象方 法。定义接口Surface,代表

26、图形表面,提供设置及获取颜色的抽象方法。再定义子类 Square,代表正方形,继承抽象类Polygon,重写其计算多边形周长和面积的抽象方法,以求解正方形的周长和面积;同时实现Position接口和Surface接口。首先,定义Position接口。在MyEclipse IDE中,右击myPro项目下src目录的ch5.example目录,在弹 出的快捷菜单中执行New-Interface命令,在弹出的New Java Interface”窗口中输入接口名 Position,如图5-5所示。55接口【例5-6】单击Finish按钮,完成接口Position的创建。文件名为Position.ja

27、va,其代码如下。package ch5.example;public interface Position/*例 5-6 Position 接 口*authorJava程序设计案例教程*version 1.0*/public abstract double getXAxis();获取 X 轴坐标public abstract void setXAxis(double xAxis);/设置 X 轴坐标public abstract double getYAxis();/获取 Y 轴坐标public abstract void setYAxis(double yAxis);/设置 Y 轴坐标图5

28、-5创建接口Position)55接口_按同样步骤完成接口Surface的创建。文件名为Surface.java,其代码如下。package ch5.example;public interface Surface/*例 5-6 Surface 接 口*authorJava程序设计案例教程*version 1.0*/public abstract String get Col or();获 取颜色public abstract void setColor(String color);设置颜色55接口_然后定义子类Square。可 参照图5-3所示的操作选择父类 Polygono再参照图5-2,

29、单击 Interface文本框右侧的Add按 钮,打开 nImplemented Interfaces Selection77 窗口,如图5-6所示。图5-6选择Position接口55接口_在Choose interfaces7 文本框中输入接口名称Pos,在Matching items”列表框中 会显示相应路径下的Position接,选择要实现的接口 Position,单击0K按钮,返回NewJava Class窗口。按同样的步 骤选择要实现的接口 Su rface。此;时,在Interfaces列表中出现 了所要实现的接口 Position和Surface,如图5-7所示。图5-7完成子

30、类Square的创建55接口_单击Finish按钮,完成子类Square的创建。文件名为Square.java,其代码如下。w_见书本P119-121。最后,编写一个测试类对子 类Square的功能进行检验。文件 名为Example5_6.java,其代码 如下。package ch5.example;public class Example5_6*例 5-6*authorJava程序设计案例教程*vers ion 1.0*/public static void ma in(String args)Square s=new Square(5,0,0,红色”);System.out.printi

31、n(该正方形的边长为:+s.getSide();System.out.printin(该正方形的 X 轴坐标为:+s.getXAxisO);System.out.printin(该正方形的 Y 轴坐标为:+s.getYAxisO);System.out.printin(该正方形的颜色为:+s.getColor();System,out.printlnl”该正方形的周长为:+s.calPerimeter();System.out.printin(该正方形的面积为:+s.cal Area();*5.6小结继承有效地实现了代码重用。Java中只允许单继承,即子类只能 有一个直接父类。在子类中通过su

32、per关键字访问父类可见成员。子 类构造方法必须继承父类中的某个构造方法。子类可以对所继承的父 类成员方法进行重写。最终类不可被继承,最终方法不可被重写。父 类对象和子类对象之间的相互引用呈现多态。父类对象引用了子类对 象被称为向上转型,子类对象引用了父类对象被称为向下转型。可使 用instanceof运算符判断引用变量为何种类型。抽象类不能被实例化,继承抽象父类的非抽象子类必须重写抽象父类中所有的抽象方法。子 类可以在继承父类的同时实现多个接口。接口只包含公开静态常量和 公开抽象方法。5.7习题1.下列代码能通过编译吗?如果不能通过编译,该如何修改?public abstract class

33、 Abstract public abstract void print();public class AOne extends Abstract Overridepublic void print()System.out.println(AOne class*);)public class ATwo extends Abstract Overridepublic void print()System.out.print In(ATwo class);一.public static void main(String args)AOne al=new AOne();ATwo a2=new ATw

34、o();al.print();a2.print();al=a2;al.print();57习题2.下列代码能运行吗?如果不能public interface Interface void print();)public class A implements Interface Overridepublic void print()System.out.println(A class*);public class B implements Interface 说明原因。public void print()System,out.println(B class);public class Test

35、 public static void main(String口 args)Interface a=new A();a.print();Interface b=new B();b.print();a=b;a.printO;)Override57习题_3.修改习题2中的A类和Test类,代码如下。修改后的代码能通过编译吗?为什么?public class A implements Interface Override public void print()4.定义接口 Equation,代表方 程。在其中定义抽象方法 showResultO,显示方程的实数解 o再定义类UQEquation,代表

36、一 元二次方程,实现Equation接口。System,out.println(A class);public void print_A()public class Test public static void main(String args)Interface a=new A();a.print_A();5.8上机实践L参照【例5-5】中的Rectangle类,定义Square类,代表正方形,继承Recta ng Ie类。2参照模块4中习题4的Triangle类,定义ETriangle类,代表等边 三角形,继承Triangle类。3.定义抽象类Vehicle,代表交通工具。在其中:封装必要的属性;定义相应的getter。和setter。方法;定义抽象方法run(),代表不同 交通工具的行驶方式。再定义4个类Automobile、Train、Ship和 Airplane,分别代表汽车、火车、轮船和飞机,继承Vehicle类。4.定义接口Sh叩e,代表图形形状。在其中:定义抽象方法 double calArea(double d),计算图形的面积。再定义2个类Circle和SSquare,分别代表圆和正方形,实现Sh叩e接口。谢谢观看!

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 通信科技 > 软件工程

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服