第4章面向对象编程_第1页
第4章面向对象编程_第2页
第4章面向对象编程_第3页
第4章面向对象编程_第4页
第4章面向对象编程_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

1、1第第4章章 面向对象编程面向对象编程 主要任务主要任务: 理解面向对象编程的基本概念理解面向对象编程的基本概念 了解类的封装了解类的封装 如何创建类和对象如何创建类和对象 了解成员变量和成员方法的特性了解成员变量和成员方法的特性 学习使用学习使用OOP方式进行程序设计方式进行程序设计 2本章主要内容l1.面向对象基本概念面向对象基本概念 l2.Java的类与对象的类与对象 l3.程序举例程序举例 l 4.类成员的修饰类成员的修饰3面向对象面向对象l面向对象分析和设计面向对象分析和设计(ObjectOrientedAnalysis & Disign) 软件开发中,需求是不稳定的;软件开

2、发中,需求是不稳定的; 需求中相对稳定的事物:对象;需求中相对稳定的事物:对象; 面向对象:以对象为基础组织需求、构架面向对象:以对象为基础组织需求、构架系统系统 ,实现软件的重用性、灵活性和可扩,实现软件的重用性、灵活性和可扩展性。展性。l面向对象程序设计面向对象程序设计(ObjectOrientedProgramming) 抽象、封装、继承、多态抽象、封装、继承、多态44.1 面向对象基本概念面向对象基本概念Java是完全面向对象编程(是完全面向对象编程(OOP)语言。)语言。l对象对象l类类l封装封装l消息消息l继承继承l接口接口54.1.1 对象对象l 对象:在软件开发的对象:在软件开

3、发的信息世界中,对象定信息世界中,对象定义为相关数据和行为义为相关数据和行为的集合,是现实世界的集合,是现实世界对象的抽象模型。对象的抽象模型。有一个帐户,帐户中有一个帐户,帐户中有存款余额,您可以有存款余额,您可以对帐户进行存款与提对帐户进行存款与提款的动作,并可以查款的动作,并可以查询以取得存款余额。询以取得存款余额。账户账户余额余额存款存款提款提款查询余额查询余额属性属性行为行为对象对象l面向对象的分析方法:面向对象的分析方法:围绕问题域中涉及的对围绕问题域中涉及的对象,对其进行描述,完象,对其进行描述,完成事务逻辑的分析和实成事务逻辑的分析和实现。现。64.1.1 对象对象l在开发软件

4、的信息世界中,对象定义为在开发软件的信息世界中,对象定义为相关数据和方法的集合。相关数据和方法的集合。l对象是现实世界对象的抽象模型。从现对象是现实世界对象的抽象模型。从现实世界对象中抽象出来的对象,一般通实世界对象中抽象出来的对象,一般通过变量描述其状态,通过方法实现其行过变量描述其状态,通过方法实现其行为。为。l变量是一种有名称的数据实体,而方法变量是一种有名称的数据实体,而方法则是和对象相关的函数或过程。则是和对象相关的函数或过程。7 4.1.2 类 l 类:对象在语言级别上的描述;是对象的软类:对象在语言级别上的描述;是对象的软件图纸、模板或原型,它定义了同类对象共件图纸、模板或原型,

5、它定义了同类对象共有的有的属性属性和和行为(或称为方法)行为(或称为方法)。 l Java编程就是类的设计和使用;可以采用自编程就是类的设计和使用;可以采用自定义或继承的方式设计一个类,也可以使用定义或继承的方式设计一个类,也可以使用系统提供的资源类。系统提供的资源类。84.1.3 封装封装l 将抽象得到的数据和行为(功能)相结合,将抽象得到的数据和行为(功能)相结合,形成一个有机的整体,也就是将数据与操作形成一个有机的整体,也就是将数据与操作数据的方法进行有机的结合,封装成数据的方法进行有机的结合,封装成“类类”。账户账户余额余额存款存款提款提款查询余额查询余额账户账户存款存款提款提款查询余

6、额查询余额l可以对对象的使用者隐藏某些属性和实现可以对对象的使用者隐藏某些属性和实现细节,仅对其公开需要的属性和行为,以控细节,仅对其公开需要的属性和行为,以控制在程序中属性的读和修改的访问级别。制在程序中属性的读和修改的访问级别。 l封装的目的:模块化和数据隐藏。封装的目的:模块化和数据隐藏。94.2 Java的类与对象的类与对象l Java是一种完全面向对象的程序设计语言,是一种完全面向对象的程序设计语言,对客观世界中的对象以类的形式进行呈现。对客观世界中的对象以类的形式进行呈现。l 类是类是Java的核心,的核心,Java程序都由类组成,一程序都由类组成,一个程序至少要包含一个类,也可以

7、包含多个个程序至少要包含一个类,也可以包含多个类。类。104.2.1 类的定义类的定义l类的定义格式:类的定义格式:public abstract final extends 父类父类 implements 接口接口 类体(成员变量和成员方法)类体(成员变量和成员方法) 其中,其中, 表示为可选项,表示为可选项,表示为必选项。表示为必选项。对类名的要求:合法标识符对类名的要求:合法标识符111类体类体l 类体的作用:对象所具有的属性和行为的代码类体的作用:对象所具有的属性和行为的代码呈现;呈现;l 成员变量:成员变量: 以以变量声明变量声明的形式呈现对象的的形式呈现对象的数据属性数据属性; 发

8、现成员变量:发现成员变量:“找名词找名词”l 成员方法:成员方法: 以以定义方法定义方法的形式呈现对象所具有的的形式呈现对象所具有的动态行为动态行为; 发现成员方法:发现成员方法:“找动词找动词”12账户账户余额余额存款存款提款提款查询余额查询余额class Accountdouble deposit;String accountNumber;void save(double money)void draw(double money)132公共类公共类l 用用public 修饰的类为公共类;修饰的类为公共类;l public是访问限制最宽的修饰词,公共类可以是访问限制最宽的修饰词,公共类可以被

9、任何包中的类使用;资源类库中的类基本都被任何包中的类使用;资源类库中的类基本都是公共类;是公共类;l 在同一个源程序文件中只能定义一个在同一个源程序文件中只能定义一个public类;类;l 类的缺省访问权限为包访问权限。类的缺省访问权限为包访问权限。144.2.2 声明和创建对象声明和创建对象l 类是对象的产品模板。在现实世界里,我们使类是对象的产品模板。在现实世界里,我们使用的是产品而不是产品的图纸。同样道理,用的是产品而不是产品的图纸。同样道理,Java运行的应该是用类创建的实例化对象。运行的应该是用类创建的实例化对象。l一个典型的一个典型的Java程序会在设定的时刻创建多程序会在设定的时

10、刻创建多种对象,它们通过消息传递进行相互交流,共种对象,它们通过消息传递进行相互交流,共同完成程序的功能。一旦任务完成,对象就会同完成程序的功能。一旦任务完成,对象就会被垃圾收集器收回,完成它从创建、使用到清被垃圾收集器收回,完成它从创建、使用到清除的过程。除的过程。l实例化对象的声明:实例化对象的声明: 银行帐户类银行帐户类accountNumberbankNameownerdepositMary的银行帐户的银行帐户12345678First National BankMary$10244.8Mike的银行帐户的银行帐户11111111First National BankMike$1024

11、.48151、对象的初始化、对象的初始化l 变量的初始化变量的初始化局部变量声明后若没有赋值,在使用变量时局部变量声明后若没有赋值,在使用变量时会出现错误;会出现错误;l 实例化对象的初始化实例化对象的初始化构造方法构造方法l 构造方法的作用:是类的成员方法,一般完构造方法的作用:是类的成员方法,一般完成对象数据的初始化操作;创建类的对象时成对象数据的初始化操作;创建类的对象时系统会根据具体情况调用构造方法。系统会根据具体情况调用构造方法。16class MyBox private int x, y; private int width; private int height; MyBox()

12、 x=0;y=0; width=10; height=10; public 类名类名(参数列表参数列表) 构造方法的语法特性:构造方法的语法特性:方法名与类名相同;方法名与类名相同;方法定义时不书写方法类型方法定义时不书写方法类型,没有,没有 return 语句;语句;如果用户没有显式定义构造如果用户没有显式定义构造方法,系统会自动给定义的类方法,系统会自动给定义的类加一个参数为空、方法体为空加一个参数为空、方法体为空的构造方法;的构造方法;如果显示定义了构造方法,如果显示定义了构造方法,则默认的空构造方法失效。则默认的空构造方法失效。172. 创建对象创建对象l 在在Java中通过中通过ne

13、w运算符动态创建对象运算符动态创建对象 对象名对象名 = new 类名类名(参数列表参数列表); Account account01=new Account(); MyBox b2=new MyBox();l 创建对象时系统做的工作:创建对象时系统做的工作: (1)动态申请堆内存空间,用于存放对象数动态申请堆内存空间,用于存放对象数据;据; (2)根据创建对象参数的书写形式,调用对根据创建对象参数的书写形式,调用对象的构造方法。象的构造方法。183. 数据的存储数据的存储l 栈区(栈区(stack) 由系统自动分配释放由系统自动分配释放 ,存,存放函数的参数值,局部变量的值等。其操作放函数的参

14、数值,局部变量的值等。其操作方式类似于数据结构中的栈。方式类似于数据结构中的栈。 l 堆区(堆区(heap) 由程序员分配释放,由程序员分配释放, 若程若程序员不释放,程序结束时可能由序员不释放,程序结束时可能由OS回收。它回收。它与数据结构中的堆是两回事,分配方式类似与数据结构中的堆是两回事,分配方式类似于链表。于链表。 l 程序代码区程序代码区 存放程序可执行代码;通常情存放程序可执行代码;通常情况下,程序中的常量信息也存放于程序代码况下,程序中的常量信息也存放于程序代码区。区。 19class Person int id;int age;Person(int _id, int _age)

15、id = _id; age = _age;public static void main(String args)int i = 10; Person p1; p1 = new Person(101, 20); System.out.println(p1.id);stack (栈)10*id:age:heap(堆)10120i:p1:20l 注意区分成员变量和局部变量,成员变量归注意区分成员变量和局部变量,成员变量归成员方法共有;成员方法共有;l 一个类里最多只能有一个一个类里最多只能有一个main方法;一般情方法;一般情况下,将带有况下,将带有main方法的类称为主类或测试方法的类称为主类或

16、测试类类l 一个完整的一个完整的JavaApplication应用程序中,应用程序中,至少要包含一个带有至少要包含一个带有main方法的类的定义。方法的类的定义。214对象成员的访问对象成员的访问l 使用成员运算符使用成员运算符 “.” 访问对象的成员变量和访问对象的成员变量和成员方法:成员方法:对象名对象名.成员变量名成员变量名对象名对象名.成员方法名成员方法名(实参列表实参列表)如:如:p1.id =101; int i = p1.getAge();l 这里的这里的“.”是是Java中用于访问对象的成员的中用于访问对象的成员的运算符。运算符。l 注意:不能通过成员运算符访问对象的构造注意:

17、不能通过成员运算符访问对象的构造方法。方法。225清除对象:清除对象:java的垃圾回收机制的垃圾回收机制l 使用使用new操作符创建对象后,操作符创建对象后,Java虚拟虚拟机自动为该对象分配内存并保持跟踪。机自动为该对象分配内存并保持跟踪。Java虚拟机对不再被引用的对象释放其虚拟机对不再被引用的对象释放其占用的内存。这种定期寻找不再使用的占用的内存。这种定期寻找不再使用的对象并自动释放对象占用内存的过程称对象并自动释放对象占用内存的过程称为垃圾收集。为垃圾收集。236.抽象类(抽象类(abstract)l 有时,定义的类代表了一个抽象的概念,在该有时,定义的类代表了一个抽象的概念,在该概

18、念层面上并没有实际的数据。概念层面上并没有实际的数据。 例如,例如,java.lang包中的包中的Number类代表了数这个抽象类代表了数这个抽象概念,可以用它在程序中产生一个数的子类,概念,可以用它在程序中产生一个数的子类,如如Interger或或Float,但从,但从Number中直接生成对中直接生成对象是没有意义的。象是没有意义的。l Java语言中可以使用语言中可以使用abstract修饰类,表示该修饰类,表示该类为抽象类类为抽象类 abstract class l 不能用不能用new实例化一个抽象类。实例化一个抽象类。244.3 程序举例程序举例l 例例 显示当前日期和时间,运行结果

19、见图:显示当前日期和时间,运行结果见图:25设计类:设计类:以字串形式返回系统当前时间和日期的以字串形式返回系统当前时间和日期的类。类。涉及到的资源:涉及到的资源:1. Java Applet小应用程序的设计模型小应用程序的设计模型2. 用于时间操作的类:用于时间操作的类:Calendar26import java.awt.Graphics;import java.applet.Applet;import java.util.Calendar;class Time Calendar t; int y, m, d, hh, mm, ss;程序代码:程序代码:27 Time () t=Calend

20、ar.getInstance(); /获得一个单一的日历对象获得一个单一的日历对象 y=t.get(t.YEAR); m=t.get(t.MONTH)+1; d=t.get(t.DATE); hh=t.get(t.HOUR_OF_DAY); mm=t.get(t.MINUTE); ss=t.get(t.SECOND); 28public String getDate() return y+ 年年+m+月月+d+日日; public String getTime() String s=hh+ 时时+mm+分分+ss+秒秒; return s; 29public class ShowTime ex

21、tends Applet Time t=new Time(); /重写重写paint方法方法 public void paint(Graphics g) g.drawString(当前日期:当前日期:+t.getDate(),50,40); g.drawString(当前时间:当前时间:+t.getTime(),50,80); 304.4 类成员的修饰类成员的修饰4.4.1 成员变量的修饰成员变量的修饰l成员变量的声明语句有如下格式:成员变量的声明语句有如下格式: public privateprotected/多选一多选一 static final transient volatile 31

22、1访问控制权限(封装特性的体现)访问控制权限(封装特性的体现)l (1)public 公共变量公共变量 由由public修饰的成员变量称为类的公共变量。修饰的成员变量称为类的公共变量。只有在确认任何外部访问都不会带来不良后只有在确认任何外部访问都不会带来不良后果的情况下才将成员声明为公共的。公共变果的情况下才将成员声明为公共的。公共变量没有秘密可言,不具有数据保护功能。量没有秘密可言,不具有数据保护功能。 l (2)private私有变量私有变量 由由private修饰的变量称为私有变量,只能被修饰的变量称为私有变量,只能被声明它的类内方法使用,拒绝任何外部类的声明它的类内方法使用,拒绝任何外

23、部类的访问,即不能通过访问运算符在类外进行访访问,即不能通过访问运算符在类外进行访问。问。322 static静态成员变量静态成员变量public privateprotected/多选一多选一 static final transient volatile 系统对成员变量的处理:系统对成员变量的处理:对于类的非静态成员变量,当创建对象时,对于类的非静态成员变量,当创建对象时,JVM为其分配存储空间;为其分配存储空间;对于类的静态成员变量,在类加载时对于类的静态成员变量,在类加载时JVM为为其分配内存空间,并为类的所有对象所共有。其分配内存空间,并为类的所有对象所共有。33class Stud

24、ent int id;static int totalNumber;Student(int _id)id = _id; totalNumber +;public static void main(String args)Student s1, s2; s1 = new Student(101);s2 = new Student(102); System.out.println(s1.id); System.out.println(s1.school);id:101*s1:*s2:id:102totalNumber: 1l类的每个实例对象都拥有类的每个实例对象都拥有自己的非静态成员变量自己的非静

25、态成员变量l静态成员变量供类的所有静态成员变量供类的所有实例对象所共有;实例对象所共有;234静态成员变量的访问:静态成员变量的访问:静态成员变量归属于类,故可以将类的静态静态成员变量归属于类,故可以将类的静态成员变量称为成员变量称为类变量类变量;可以通过可以通过 类名类名. 静态成员变量名静态成员变量名 的方式访问的方式访问非私有静态成员变量;非私有静态成员变量;System.out.println(Student.totalNumber);35什么情况下将成员变量声明为静态成员变量?什么情况下将成员变量声明为静态成员变量?在面向对象的程序设计中,如果一个类的某个在面向对象的程序设计中,如果

26、一个类的某个属性值是所有该类对象共有的,可以将其设置属性值是所有该类对象共有的,可以将其设置为静态成员变量;为静态成员变量; 在某些场合下,不想创建类的实例,仅仅使用在某些场合下,不想创建类的实例,仅仅使用类的某些数据信息。类的某些数据信息。363final 最终变量最终变量l 一旦成员变量被声明为一旦成员变量被声明为final,在程序运行中,在程序运行中其值将不能被改变。这样的成员变量就是一其值将不能被改变。这样的成员变量就是一个常量。例如:个常量。例如: final double PI=3.14159;l 该语句声明一个常量该语句声明一个常量PI,如果在后面试图重,如果在后面试图重新对它赋

27、值,将产生编译错误。另外,常量新对它赋值,将产生编译错误。另外,常量名一般用大写字母。名一般用大写字母。374.4.2 成员方法的修饰成员方法的修饰l 成员方法相当于其它语言的函数或过程,是成员方法相当于其它语言的函数或过程,是命令语句的集合。成员方法的声明格式和顺命令语句的集合。成员方法的声明格式和顺序如下:序如下: public/private/protected static final abstract native synchronized 类型类型 方法名方法名(形参列表形参列表) throws 异常类异常类型型方法体;方法体;381成员方法的访问权限成员方法的访问权限l 成员方法

28、的访问权限说明同成员变量的访问成员方法的访问权限说明同成员变量的访问权限说明;权限说明;l 由于方法是外界和对象进行消息传递的途径,由于方法是外界和对象进行消息传递的途径,所以一个类中常有多个所以一个类中常有多个public公有访问权限公有访问权限的成员方法。的成员方法。39Student stu = new Student();stu.setAge (-12); class Student int age;public class Test pubic static void main(String args)Student stu = new Student();stu.age = -12

29、; class Student private int age; void setAge(int _age)if(_age 100 | _age 0)age = 20;else age = _age; int getAge()return age; l为了确保数据的访问安全性,为了确保数据的访问安全性,一般将类的成员变量声明为一般将类的成员变量声明为private访问权限;访问权限;l可以为私有成员变量设计公可以为私有成员变量设计公有的有的get、set方法,供外界访方法,供外界访问。问。402abstract 抽象方法抽象方法l 可用可用abstract定义没有方法体的抽象方法。定义没有方法

30、体的抽象方法。l 抽象方法只能出现在抽象类中,用以给出该类事抽象方法只能出现在抽象类中,用以给出该类事物应该具有的行为,但没有统一的处理方式。物应该具有的行为,但没有统一的处理方式。 Animal + String species + void yell() abstract class Animal String species; public abstract void yell(); /注意空方法与抽象方法的区别注意空方法与抽象方法的区别412abstract 抽象方法抽象方法l只能在抽象类中声明抽象方法;只能在抽象类中声明抽象方法;labstract不能和不能和final、privat

31、e、static叠用叠用修饰抽象方法。修饰抽象方法。l一个抽象类可以定义统一的编程接口,用以描一个抽象类可以定义统一的编程接口,用以描述同类事物共同的状态和行为,但各自的实现细述同类事物共同的状态和行为,但各自的实现细节是不同的。该类事物派生出来的类共有的行为节是不同的。该类事物派生出来的类共有的行为由抽象类中的抽象方法来约束,行为的具体实现由抽象类中的抽象方法来约束,行为的具体实现由派生出的类给出。由派生出的类给出。423static 静态方法静态方法l静态方法也称为类方法,在不创建类的对象的静态方法也称为类方法,在不创建类的对象的情况下可以通过类名调用类方法。调用格式:情况下可以通过类名调

32、用类方法。调用格式:类名类名.静态方法名();静态方法名();Math.pow(4.5, 3);l在静态方法中不能直接引用非静态成员;在静态方法中不能直接引用非静态成员;l构造方法不能被声明为静态方法。构造方法不能被声明为静态方法。43习习 题题l1静态变量有何特点?如何引用静态静态变量有何特点?如何引用静态变量?变量?l2.静态方法有何特点?静态方法引用成静态方法有何特点?静态方法引用成员变量时有何要求?员变量时有何要求?l3.何为抽象类、抽象方法?何为抽象类、抽象方法?l4.类与对象有何关系?如何创建对象?类与对象有何关系?如何创建对象?44 l6.Java程序由什么构成?程序设计的基程序

33、由什么构成?程序设计的基本思想是什么?本思想是什么?l8.什么是类变量、成员变量、局部变量?什么是类变量、成员变量、局部变量?45 l 11.指出下面关于垃圾收集的哪些叙述是对的。(指出下面关于垃圾收集的哪些叙述是对的。(B)l A. 程序开发者必须自己创建一个线程进行内存释程序开发者必须自己创建一个线程进行内存释放的工作。放的工作。 l B. 垃圾收集将检查并释放不再使用的内存。垃圾收集将检查并释放不再使用的内存。 l C. 垃圾收集允许程序开发者明确指定并立即释放垃圾收集允许程序开发者明确指定并立即释放该内存。该内存。 l D. 垃圾收集能够在期望的时间释放被垃圾收集能够在期望的时间释放被java对象使对象使用的内存。用的内存。 l 12.下面关于变量及其范围的陈述哪些是对的。下面关于变量及其范围的陈述哪些是对的。(ACD) l A. 实例变量是类的成员变量。实例变量是类的成员变量。 l B. 实例变量用关键字实例变量用关键字static声明。声明。 l C. 在方法中定义的局部变量在该方法被执行时创建。在方法中定义的局部变量在该方法被执行时创建。 l D.

温馨提示

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

评论

0/150

提交评论