Java语言程序设计:ch03 面向对象程序设计

上传人:re****.1 文档编号:568658037 上传时间:2024-07-25 格式:PPT 页数:42 大小:485KB
返回 下载 相关 举报
Java语言程序设计:ch03 面向对象程序设计_第1页
第1页 / 共42页
Java语言程序设计:ch03 面向对象程序设计_第2页
第2页 / 共42页
Java语言程序设计:ch03 面向对象程序设计_第3页
第3页 / 共42页
Java语言程序设计:ch03 面向对象程序设计_第4页
第4页 / 共42页
Java语言程序设计:ch03 面向对象程序设计_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《Java语言程序设计:ch03 面向对象程序设计》由会员分享,可在线阅读,更多相关《Java语言程序设计:ch03 面向对象程序设计(42页珍藏版)》请在金锄头文库上搜索。

1、1第3章 面向对象程序设计2本章总体纲要本章总体纲要类和对象类和对象封装性封装性继承性继承性多态性多态性包包(package)(package)接口接口关键字关键字abstractabstract、staticstatic、finalfinal和和thisthis内部类内部类变量作用域范围和参数传递方式变量作用域范围和参数传递方式面向对象程序设计基本思想面向对象程序设计基本思想3面向对象程序设计整体介绍面向对象程序设计整体介绍面向对象程序设计面向对象程序设计(OOP) (OOP) 将将数据数据( (属性属性) )和和方法方法( (行为或功能行为或功能) )封装封装到类到类(classes)(c

2、lasses)中中数据数据与与方法方法常常是紧密相关的常常是紧密相关的对象对象(objects): (objects): 类的实例对象或类本身类的实例对象或类本身三个基本特性:三个基本特性:封装性封装性、继承性继承性和和多态性多态性4类类类类(class) 的基本组成:的基本组成:(成员成员)域域和和(成员成员)方方法法 每个对象:拥有内存每个对象:拥有内存存储成员域存储成员域/方法方法静态的成员静态的成员域域/方法方法属于类属于类其它成员其它成员域域/方法方法属于实例对象属于实例对象5类类一个类包括两部分:类声明 类体类体为该类的对象提供了在生存期内类体为该类的对象提供了在生存期内需要的所有

3、代码。包括以下几部分需要的所有代码。包括以下几部分:构造方法( constructor )成员变量( member variable )的声明成员变量也称为域成员方法(Method)的实现 类的成员类的成员: : 域和方法域和方法类的定义格式如下:类的定义格式如下: 类修饰词类修饰词 classclass 类名类名 extendsextends 父类名父类名 implementsimplements 接口名称列表接口名称列表 类体类体 类图StudentnamesexstuIDclassnamemajorcollegeSchoolloginNamepasswordlogin()searchSc

4、ore()chat()6类类与与C+C+程序不同的是程序不同的是: :C+C+中中不能不能在类体内给数据成员赋值,在类体内给数据成员赋值,JavaJava可以;可以;JavaJava中中每个方法都必须隶属于某个类每个方法都必须隶属于某个类,而,而C+C+可以有,可以有,如友元函数;如友元函数;对类的实例对象内存的回收对类的实例对象内存的回收垃圾回收机制垃圾回收机制(教材(教材P63P63)若在类的定义中含有修饰词若在类的定义中含有修饰词publicpublic, ,则该类应当与所在的则该类应当与所在的文件同名,在同一个文件同名,在同一个JavaJava源文件中可以包含多个类,但源文件中可以包含

5、多个类,但不能包含两个或两个以上的具有不能包含两个或两个以上的具有publicpublic的类。的类。 如:如:P64 P64 J_Finalize.javaJ_Finalize.java;后面同后面同包包演示一起验证演示一起验证“同一个同一个JavaJava源文件不能包含两源文件不能包含两个或两个以上的具有个或两个以上的具有publicpublic的类的类”7本章总体纲要本章总体纲要类和对象类和对象封装性封装性继承性继承性多态性多态性包包(package)(package)接口接口关键字关键字abstractabstract、staticstatic、finalfinal和和thisthis

6、内部类内部类变量作用域范围和参数传递方式变量作用域范围和参数传递方式面向对象程序设计基本思想面向对象程序设计基本思想8类成员的封装性类成员的封装性成员成员(域或方法域或方法)的访问控制方式的访问控制方式:1) public2) private3) protected4) default(缺省方式缺省方式)9封装性的作用的作用彻底消除了传统结构方法中数据与操作分离所带来彻底消除了传统结构方法中数据与操作分离所带来的种种问题,的种种问题,提高了程序的可复用性和可维护性提高了程序的可复用性和可维护性,降低了程序员保持数据与操作相容的负担。降低了程序员保持数据与操作相容的负担。把对象的私有数据和公共数

7、据分离开来,保护了私把对象的私有数据和公共数据分离开来,保护了私有数据,减少了可能的模块间干扰,达到有数据,减少了可能的模块间干扰,达到降低程序降低程序复杂性、提高可控性的目的复杂性、提高可控性的目的。增强使用的安全性,使用者不必了解实现细节,而增强使用的安全性,使用者不必了解实现细节,而只需要通过设计者提供的外部接口来操作它。优点只需要通过设计者提供的外部接口来操作它。优点是实现是实现高度模块化高度模块化,从而产生,从而产生软件构件软件构件,利用构件,利用构件快速地组装程序。快速地组装程序。10本章总体纲要本章总体纲要类和对象类和对象封装性封装性继承性继承性多态性多态性包包(package)

8、(package)接口接口关键字关键字abstractabstract、staticstatic、finalfinal和和thisthis内部类内部类变量作用域范围和参数传递方式变量作用域范围和参数传递方式面向对象程序设计基本思想面向对象程序设计基本思想11继承性继承性继承性继承性 软件重用软件重用的一种方法的一种方法根据已有的类创建新的类根据已有的类创建新的类采纳了旧的类的属性采纳了旧的类的属性( (域域) )及其行为及其行为( (方法方法) )增加了新的能力增加了新的能力子类继承父类子类继承父类子类增加了新的成员域或新的成员方法子类增加了新的成员域或新的成员方法采用关键字采用关键字exte

9、ndsextendspublic classpublic class J_HelloAppletJ_HelloApplet extendsextends AppletApplet / / 类类J_HelloAppletJ_HelloApplet结束结束12继承性继承性13多重继承多重继承在有些计算机语言中,允许一个类有多个在有些计算机语言中,允许一个类有多个直接父类。这种继承关系称为直接父类。这种继承关系称为多重继承多重继承JavaJava不支持多重继承不支持多重继承Java Java 允许一个类有多个直接父接口允许一个类有多个直接父接口( (interfaceinterface) ) 14本

10、章总体纲要本章总体纲要类和对象类和对象封装性封装性继承性继承性多态性多态性包包(package)(package)接口接口关键字关键字abstractabstract、staticstatic、finalfinal和和thisthis内部类内部类变量作用域范围和参数传递方式变量作用域范围和参数传递方式面向对象程序设计基本思想面向对象程序设计基本思想15多态性多态性优点优点: :代码重用代码重用简化设计、简化代码简化设计、简化代码便于程序扩展便于程序扩展多态性的种类多态性的种类1)1)静态的多态性静态的多态性重载重载在在编译时编译时就能被识别就能被识别2)2)动态的多态性动态的多态性覆盖覆盖在在

11、程程序序运运行行时时才才被被识识别别(教教材材P74例例程程)16本章总体纲要本章总体纲要类和对象类和对象封装性封装性继承性继承性多态性多态性包包(package)(package)接口接口关键字关键字abstractabstract、staticstatic、finalfinal和和thisthis内部类内部类变量作用域范围和参数传递方式变量作用域范围和参数传递方式面向对象程序设计基本思想面向对象程序设计基本思想17包包(package)包是包是JavaJava中有效管理类的一个机制,可以将一组中有效管理类的一个机制,可以将一组相关的类或接口封装在包相关的类或接口封装在包( (package

12、package) )里,里,它提供了访问保护和名字空间管理。Java编译器使用文件系统目录来保存包。看教材看教材P78P78例程例程理解以下几点:理解以下几点:通过关键字通过关键字packagepackage声明包语句;声明包语句;packagepackage语句作为语句作为JAVAJAVA源文件的第一条语句,源文件的第一条语句,指明该源文件定义的类所在的包;指明该源文件定义的类所在的包;使用包中类,利用使用包中类,利用importimport 语句指定类的位置语句指定类的位置18包包(package)JavaJava系统提供了很多已经写好的包:数学计算、系统提供了很多已经写好的包:数学计算、

13、输入输入/ /输出、字符串操作。尽量利用已有的包、输出、字符串操作。尽量利用已有的包、避免重复工作避免重复工作如:第如:第7 7章在使用输入操作时,需使用语句章在使用输入操作时,需使用语句 import java.io.InputStream import java.io.InputStream如:第如:第8 8章用到两个关键的包章用到两个关键的包 import java.awt.* import java.awt.* import java.swing.* import java.swing.*演示演示利用教材p78程序演示一个包19了解:了解:使用包的好处:使用包的好处:程序员能很容易确定

14、程序员能很容易确定同一包中的类是相互关联的同一包中的类是相互关联的。程序员能很方便地了解到程序员能很方便地了解到在哪里可以找到能完成特在哪里可以找到能完成特定功能的类定功能的类 由于每个包都创建了一个由于每个包都创建了一个名字空间名字空间,个人创建的类,个人创建的类名不会和其它包中的类名名发生冲突名不会和其它包中的类名名发生冲突 可以使同一包中的类彼此不加限制地访问,而同时可以使同一包中的类彼此不加限制地访问,而同时对其它包中的类对其它包中的类提供访问控制提供访问控制。20本章总体纲要本章总体纲要类和对象类和对象封装性封装性继承性继承性多态性多态性包包(package)(package)接口接

15、口关键字关键字关键字关键字abstractabstractabstractabstract、staticstaticstaticstatic、finalfinalfinalfinal和和和和thisthisthisthis内部类内部类变量作用域范围和参数传递方式变量作用域范围和参数传递方式面向对象程序设计基本思想面向对象程序设计基本思想21接口接口JavaJava不支持多继承,使得不支持多继承,使得JavaJava简单,易于管理;为了克服简单,易于管理;为了克服单继承的缺点,单继承的缺点,JavaJava使用了接口,使用了接口,一个类可以实现多个接一个类可以实现多个接口,口,解决java不能多

16、继承,另外一个作用就是屏蔽实现的不同的差异。接口(接口(interfaceinterface)是一种与类相似的结构,但它)是一种与类相似的结构,但它只包含常只包含常量和抽象方法量和抽象方法。接口在许多方面和。接口在许多方面和抽象类抽象类相近,不同的是,相近,不同的是,它不能包含变量和具体的方法。它不能包含变量和具体的方法。接口的定义格式为:接口的定义格式为:public public interfaceinterface 接口名接口名 extends extends 父类接口名列表父类接口名列表 常量常量 方法方法 22例子例子publicpublic interfaceinterface M

17、yInterface public static finalpublic static final int int MAX_AGE = 100; /变量public static final 类型 public abstract voidpublic abstract void showInfo(); /方法是 public abstract 类型 intint M_CHANCE = 10; /合法 默认的都是 public static final 类型 voidvoid method(); /合法 默认的都是 public abstract 类型的 /voidvoid methoda()

18、System.out.println(methoda); /若不注释,编译出错,因为接口中不能有方法体,只能包含抽象方法, /publicpublic MyInterface() /若不注释,编译出错,因为接口中不允许定义构造方法 接口中的常量都是接口中的常量都是public static finalpublic static final类型,这类型,这是系统默认的规定,即使没有修饰符也是如此。是系统默认的规定,即使没有修饰符也是如此。而接口中的方法都必须而接口中的方法都必须public abstractpublic abstract类型。类型。23接口的使用在类的声明中用implements

19、implements子句来表示它所实现的接口。实现某接口的类,必须实现接口中定义的所有方法,否则需定义成抽象类。在类体中可以使用接口中定义的常量。一个类可以实现多个接口,在implements子句中用逗号分开。 如:如:public class A implements B, C, D24接口的继承关系接口的继承关系接口也存在继承关系,即接口可以继承接口。但与类不同的是,接口可以多继承接口可以多继承。例如:interfaceinterface IChineseWelcome String CHINESE_MSG = 你好,欢迎你!; /定义常量 voidvoid sayChinese();in

20、terfaceinterface IEnglishWelcome String ENGLISH_MSG = Hello,Welcome!; /定义常量 voidvoid sayEnglish();interfaceinterface IWelcome extendsextends IChineseWelcome, IEnglishWelcome /继承接口 String ENGLISH_AND_CHINESE_MSG = Hello,Welcome! 你好,欢迎你!; voidvoid sayChineseAndEnglish();public class A extends B implem

21、ents C, D 演示演示利用教材P109程序演示接口25按类进行分解1.1.编写文件编写文件J_Shape.javaJ_Shape.java,实现接口,实现接口J_ShapeJ_Shape2.2.编写文件编写文件J_CircleJ_Circle.java.java,实现类,实现类J_CircleJ_Circle继承自接口继承自接口J_ShapeJ_Shape3.3.编写文件编写文件J_Rectangle.javaJ_Rectangle.java,实现类,实现类J_RectangleJ_Rectangle继承自接口继承自接口J_ShapeJ_Shape4.4.编写文件编写文件J_AreaJ_

22、Area.java.java,实现类,实现类J_AreaJ_Area计算矩形和圆面积计算矩形和圆面积利用类利用类J_CircleJ_Circle和类和类J_RectangleJ_Rectangleinterface3interface3数据库调用示例数据库调用示例理解:面向接口编程理解:面向接口编程26在程序设计中,尽量使用接口变量,实现设计和实现设计和代码分离代码分离,这种编程思想称为面向接口的编程面向接口的编程。按照这种思想,在系统分析和架构中,分清层次和依赖关系,每个层次不是直接向其上层提供服务(即不是直接实例化在上层中),而是通过定义一组接口,仅向上层暴露其接口功能,上层对于下层仅仅是

23、接口依赖,而不依赖具体类。利用接口使设计与实现相分离,使利用接口的用户程序不受不同接口实现的影响,不受接口实现改变的影响,这体现了“开闭原则”(对扩展是开放的,对于修改是封闭)。27了解:接口的作用接口可以规范类的方法规范类的方法,使实现接口的类具有相同的方法声明。任何实现了接口的类都必须实现接口所规定的方法,否则必须定义为抽象类。接口提供了一种抽象的机制,通过接口,可以把功能设计功能设计和实现分离和实现分离。接口只告诉用户方法的特征是什么,它并不关注是如何实现的,接口指出如何使用一个对象,而不说明它如何实现。接口能更好地体现多态性更好地体现多态性,通过接口实现不相关类的相同行为,而无需考虑这

24、些类之间的关系。任何实现接口的类的实例,都可以通过接口来调用。通过抽象的接口来操纵具体的对象,可以极大地减少子系统实现之间的相互依赖关系,使对象之间彼此独立,并可以在运行时替换有相同接口的对象,动态改变它们相互的关系,实现多态。28本章总体纲要本章总体纲要类和对象类和对象封装性封装性继承性继承性多态性多态性包包(package)(package)接口接口关键字关键字abstractabstract、staticstatic、finalfinal和和thisthis内部类内部类变量作用域范围和参数传递方式变量作用域范围和参数传递方式面向对象程序设计基本思想面向对象程序设计基本思想29abstra

25、ctJavaJava允许定义抽象允许定义抽象(abstract)(abstract)的类和方法,的类和方法,抽象的方法可抽象的方法可以只提供方法的头部,但不提供实现的部分以只提供方法的头部,但不提供实现的部分。例如例如: :public public abstractabstract class J_Vehicle class J_Vehicle public abstract class J_Shape public abstract class J_Shape public abstract void fuel(); public abstract void fuel(); public

26、abstract void mb_draw(); public abstract void mb_draw(); 30static静态静态 ( (staticstatic) )域域静态静态 ( (staticstatic) )方法方法实际上隶属于类对象实际上隶属于类对象 , ,在该类所有实例之间是共享的.1 1、类变量与实例变量、类变量与实例变量 在该类所有实例之间是共享的。在加载该类时,只分配一次空间,并初始化。例:class Employee static int com ;则运行时,comcomcomcome1e2e331类变量作用类变量作用可用来在实例之间进行通信或跟踪该类实例的数目。

27、 例:public class Count private int serialNumber ; private static int counter = 0 ; public Count( ) counter+ ; serialNumber = counter ;32static 2、类方法与实例方法、类方法与实例方法二者区别:实例方法既能访问当前对象的实例变量也能访问类变量;类方法只能访问类变量而不能访问实例变量。 实例方法只能由实例对象来调用,而类方法即可以由实例对象调用也可以由类名直接调用。 33Static几点几点说明可用可用staticstatic来定义全局变量和全局方法来定义全局

28、变量和全局方法,这时由于,这时由于类成员仍然封装在类中,与类成员仍然封装在类中,与C C、C+C+相比,可以限制相比,可以限制全局变量和全局方法的使用范围而防止冲突。全局变量和全局方法的使用范围而防止冲突。一个类的一个类的main( )main( )方法方法必须要用必须要用staticstatic来修饰来修饰,也,也是因为是因为JavaJava运行时系统在开始执行一个程序前,并运行时系统在开始执行一个程序前,并没有生成类的一个实例,它只能通过没有生成类的一个实例,它只能通过类名类名来调用来调用mainmain( )( )方法作为程序的入口。方法作为程序的入口。通常,通常,staticstati

29、c与与finalfinal一起使用来指定一个常量一起使用来指定一个常量 如:如:protected protected static finalstatic final String DISABLE = String DISABLE = disable;disable;34Static3、初始化类变量和实例变量 可以在类中声明的时候初始化 class BedAndBreakfast static final int MAX_CAPACITY = 10; /类变量 boolean full = false; float f = 3.14f; Depth o = new Depth(); /引用类

30、型引用类型 int i = f(); /通过调用一个方法来提供初始值通过调用一个方法来提供初始值35final可以修饰的对象可以修饰的对象: :1)1)final final 域域2)2)final final 方法方法3)3)final final 类类36本章总体纲要本章总体纲要类和对象类和对象封装性封装性继承性继承性多态性多态性包包(package)(package)接口接口关键字关键字abstractabstract、staticstatic、finalfinal和和thisthis内部类内部类变量作用域范围和参数传递方式变量作用域范围和参数传递方式面向对象程序设计基本思想面向对象程序

31、设计基本思想37本章总体纲要本章总体纲要类和对象类和对象封装性封装性继承性继承性多态性多态性包包(package)(package)接口接口关键字关键字abstractabstract、staticstatic、finalfinal和和thisthis内部类内部类变量作用域范围和参数传递方式变量作用域范围和参数传递方式面向对象程序设计基本思想面向对象程序设计基本思想38内部类定义在其它类内部的类称为定义在其它类内部的类称为内部类内部类内部类有些类似于类的成员域或成员方法内部类有些类似于类的成员域或成员方法匿名内部类:常常用在图形用户界面设计匿名内部类:常常用在图形用户界面设计(GUI)(GUI

32、)中,进行各种事件处理中,进行各种事件处理例如例如: : 鼠标事件、按钮事件和键盘事件等鼠标事件、按钮事件和键盘事件等39本章总体纲要本章总体纲要类和对象类和对象封装性封装性继承性继承性多态性多态性包包(package)(package)接口接口关键字关键字abstractabstract、staticstatic、finalfinal和和thisthis内部类内部类变量作用域范围和参数传递方式变量作用域范围和参数传递方式面向对象程序设计基本思想面向对象程序设计基本思想40变量的作用域范围作用域范围作用域范围:程序中能够使用该变量:程序中能够使用该变量( (域与域与局部变量局部变量) )的范围

33、的范围分类分类: : 类作用域范围:类作用域范围:从类定义的第一个从类定义的第一个“ ”开始,开始,到到 最后一个最后一个“ ”结束。超出类的范围,类的结束。超出类的范围,类的成员方法不能直接通过它的名称进行访问成员方法不能直接通过它的名称进行访问块作用域范围:块作用域范围:从变量声明之处,到该块的最从变量声明之处,到该块的最后一个后一个“ ”。例如。例如: : 局部变量与成员方法的局部变量与成员方法的参数参数41值传递示例/ / 编写一个程序用来说明编写一个程序用来说明/ Java方法调用过程中方法调用过程中/ 值传递方式值传递方式/ /42源程序/ 文件名文件名: J_Primitive.

34、java; public class J_Primitive public static void mb_method( int a ) System.out.println(在在a+之前方法参数之前方法参数a= + a); a+; System.out.println(在在a+之后方法参数之后方法参数a= + a); / 方法方法mb_method结束结束 public static void main(String args ) int i=0; System.out.println(在方法调用之前变量在方法调用之前变量i= + i); mb_method(i); System.out.println(在方法调用之后变量在方法调用之后变量i= + i); / 方法方法main结束结束 / 类类J_Primitive结束结束编译命令为:编译命令为:javac J_Primitive.javajavac J_Primitive.java执行命令为执行命令为: :java J_Primitivejava J_Primitive最后执行的结果为最后执行的结果为: :在方法调用之前变量在方法调用之前变量i=0i=0在在a+a+之前方法参数之前方法参数a=0a=0在在a+a+之后方法参数之后方法参数a=1a=1在方法调用之后变量在方法调用之后变量i=0i=0

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

最新文档


当前位置:首页 > 高等教育 > 研究生课件

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