第3章:面向对象编程基础
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.2 Java的类和对象
(2) 成员变量
成员变量定义的一般形式如下: [修饰字] 类型 变量名; 其中,修饰字可以空缺,修饰字用于对成员变量限制其访问权限,成员 的访问权限有4种:private、protected、public 和友好的(后面详细 介绍)。 变量的类型可以是任何数据类型,变量的名字是一个标识符。Java 中成 员变量的名字可以与类的方法的名字相同。 成员变量对类内定义的方法都有效。类的方法也可定义变量,这种变量 称为局部变量,局部变量只在定义它的方法中有效。
3.1 面向对象的基本概念
3. 消息(方法调用的信息)
对象之间的交互通过相互发送消息(Message )实现。 当对象A希望对象B执行B的一个方法时,用 对象A发送消息给对象B来实现。 消息发送时,如果还需要其他参数,消息可带 参数一起发送。
3.1 面向对象的基本概念
4. 类(对象的类属/类别)
程序设计中利用抽象,在面向过程阶段,系统按函数和 模块进行设计。 在面向对象阶段,利用抽象按类设计。类是目前支持抽 象的最好工具。
3.1 面向对象的基本概念
2. 对象: (万物皆为对象)
对象有状态(属性)、行为(操作)和名称( 对象名) 对象的名称用于程序引用对象,对象的成员变 量,用于存储对象的状态信息,对象的方法用 于描述对象的行为
练习题
【真题练习】参照以下Java代码,以下四个叙述中最确 切的是( )
class A{ int x; static int y; void fac(String s){ Syatem. out. println("字符串:"+s); } } A.x、y和s都是成员变量 B.x是实例变量、y是类变量、s是局部变量 C.x和y是实例变量、s是参数 D.x、y和s都是实例变量
子类自然地继承其父类的不是 private 的成员变量作为自己的成员变量,并且自然地 继承父类中不是 private的方法作为自己的方法
子类中声明的方法跟超类中的方法名字、参数的个数和类型完全相同,超类的方 法在子类中就被隐藏。当子类对象调用该方法时,自然调用子类的方法。超类方 法在子类中隐藏称为重写或置换【其他教材上叫做“覆盖”】
高等教育自学考试
Java语言程序设计(一)
主讲教师: 刘波
liubocq@
海天培训学校
第三章
面向对象编程基础
学习重难点及要求
重点:Java 语言的类、对象、继承、接口以及
Java 小应用程序基础
难点:继承、多态性、接口
要求:重点。考试分值约占15%
学习内容
3.1 面向对象的基本概念
public:设置没有限制的访问权限,其他类的方法都能访问。 private:设置最强限制的访问权限,其他类的方法都不能访问。 protected:只限于子类和同一包中的类的方法能访问。 <default>:(无修饰,友好的)只允许同一包中类的方法访问。
3.2 Java的类和对象
5. 访问权限
把同一类对象的所有共同的属性和行为放在一 起描述。这种声明对象共有属性和行为的机制 称为类。 类概括了同类对象的共有性质:数据和方法。
类的每个对象(即类的实例)都有自己的标识 ,但它们具有相同的一组属性和提供相同的一 组方法。
3.1 面向对象的基本概念
5. 继承
继承(Inheritance)就是在已有类基础上,扩充属性,或扩 充与改写其某些方法,生成新的类,这个方式称为继承。 继承定义的类称为子类,被继承的类称为超类(父类)。子类 自动含有父类具有的属性和方法。 超类声明定义共同的特性,子类继承超类的共有特性,还可增 加某些特殊性,并可扩充和修正部分行为。 继承具有传递性。 继承的最大好处是对象能按层次划分,并在子类中,与父类相 同的属性和方法可以不再重复声明。继承体现了面向对象方法 与现实世界中人们的抽象思维方式保持一致。
(4) 使ห้องสมุดไป่ตู้对象
程序使用对象包括:
为对象设置状态 获取对象的状态 改变对象的状态 应用对象的某种方法。
前三种需要访问对象的成员变量,最后一种要调用对象的方法。 程序通过操作符“.”对某对象的成员变量进行访问 和方法调用。 一般形式为:
对象名.成员变量 对象名.方法([参数表])
3.2 Java的类和对象
6. 继承
Java语言不支持多重继承,限定一个类只能有一个超类。 在子类声明中加入extends子句来指定超类。格式如下: class 子类名 extends 超类名 { 类体 }
3.2 Java的类和对象
6. 继承
子类对父类的继承性,Java语言作以下规定:
3.2 Java的类和对象
类被声明后,就可用类创建对象,被创建的对象称为类的实 例。程序使用对象需依次经历4个步骤:声明对象、创建对 象、使用对象和撤销对象。 2. 对象
(1) 声明对象
由于类是一种引用类型(参见节后面叙述的对象的内存模型),声明对象只是命 名一个变量,这个变量能引用类的对象。由于对象还没有创建,所以也暂不要为 对象分配内存。 声明对象的一般形式为: 类名 对象名;
多态性
开车
3.2 Java的类和对象
类是一种类型,类封装对象的属性和方法,是同一类对象的模板。Java 程序的 主要部分是描述类。
1. 类
(1) 类的声明【类的内部由属性(即:成员变量)和方法构成】
关键字class引导一个类的声明,类名是一个标识符。类体给出类的成员变量定义和方法定 义,类体中不能有独立的执行代码,所有的执行代码只能出现在方法中。
其他:程序可通过调用方法finialize()显式通知系统,请求系统撤销对象【但不 意味着系统会立即撤销对象】 。
3.2 Java的类和对象
5. 访问权限 访问权限实现访问控制。在类的成员中引入权限控制,保护 类的成员不在非期望的情况下被引用。 在类声明中,除了类中方法总能访问类的成员变量外,Java 语言为其他类的方法访问本类成员变量和方法,提供以下 4 种访问权限:
3.2 Java的类和对象
(3) 方法
方法给出对象的行为,方法声明的一般形式如下:
返回值类型
方法体 }
方法名(类型 参数名,...,类型 参数名){
如果方法无返回值,就用 void 关键字。方法可以有0-N个参数,用逗号分隔,参数类型 可以是任何数据类型。
如果某方法中的参数名或局部变量的名与类的成员变量的名相同,则成员变量在这个方法 内暂时被隐藏。如果成员变量在方法内被隐藏,又在方法中要引用成员变量,必须使用 this。this表示调用该方法的当前对象。 在 Java 程序中,类的方法可以重载。方法重载是指在一个类中定义多个相同名字的方法 ,但这些方法或者参数个数不同或者顺序参数的类型不同。编译器将根据方法调用时的参 数个数和参数类型及顺序确定调用的是哪一个方法。(注意:重载与多态不同)
3.2 Java的类和对象
(2) 创建对象
创建对象就是为对象分配内存,为对象分配内存也称为类的实例化。 一般形式为: new 构造方法([参数表])
其中参数被构造方法用于给对象设置初值。
对象声明与创建也可一起完成,一般格式为: 类名 对象名 = new 构造方法([参数表])
继承
年龄 吃饭
人
年龄 吃饭
现代人
学历
开车
年龄
吃饭
现代女孩
学历
开车
购物
3.1 面向对象的基本概念
6. 多态性
多态性是指不同对象对同样的方法有不同的实现。类型 适应性多态性要求自动按对象的实际类型正确调用它的 方法。 联编是将发送给对象的消息与含执行该消息方法的对象 连接起来。 当联编在编译和连接阶段实现时,称为静态联编;当联 编推迟至运行时间实现时,称为动态联编。 动态联编是面向对象语言必须具有的一种能力,是实现 上述多态性的技术基础。
3.2 Java的类和对象
6. 继承
(1)多态性:
子类对象也是超类对象,凡超类对象可以应用的地方,子类对象也适用。如果超类现代人 有开车的方法,那么对于子类小孩、现代女郎、圣诞老人的开车指令交给他们的超类(现 代人)来处理,也一样适用。 但有一个问题:超类把小孩、现代女郎、圣诞老人统一看做了现代人,调用现代人的开车 指令,则无法在编译时推断出由小孩、现代女郎、圣诞老人那种类型的对象来处理。因此 ,Java采用了一种延迟装载技术:编译时暂不绑定调用哪个对象的方法,必须在运行时才 绑定调用方法的技术,也称为动态联编。动态联编支撑了Java语言的多态性。 有人也将调用重载方法作为多态性之一。重载能由调用时提供的参数个数和参数的类型顺 序,在编译时就能确定被调用的方法,这种多态性不需要动态联编技术的支持。
3.2 Java的类和对象
3. 实例变量和类变量(类的静态属性) 类的成员变量又分为实例变量和类变量。在定义成员变量时,用关键字 static 修饰的是类变量,定义时未用static 修饰的是实例变量。
区别:
每个对象都有自己的实例变量;类变量是类的所有对象共享成员变量,一个类变量 在类中只有一个,它属于整个类,而不属于类的某个对象。 引用类变量途径有两条,或通过类,或通过对象,格式为:类名.类变量名 或 对 象名.类变量名;实例变量只能通过:对象名.实例变量名。 不同对象的实例变量将被分配不同的内存空间,改变类的某一个对象的实例变量的 值不会影响其他对象的实例变量。类变量的内存只有一处,让类的所有对象共享, 从类的任一对象改变类变量,类的其他对象都能发现这个改变。
3.2 Java的类和对象
(4) 构造方法
构造方法是一种特殊的方法,这种方法的名与它的类名相同,并且不返回结果, 也不写上void 关键字。 构造方法的作用是创建类的对象,并给对象初始化。 构造方法是公共方法,但程序不能显式调用构造方法。程序运行时,当有对象要 创建时,由系统自动调用构造方法。 如果类的声明没有定义构造方法,系统就增补一个没有参数的默认构造方法
3.2 Java的类和对象
4. 实例方法和类方法(类的静态方法) 如同类的成员变量有实例变量和类变量两种一样,类的方法也有两种:实例方法 和类方法。在方法定义时,冠以修饰字 static 的方法称为类方法,没有冠以 static 修饰字的方法是实例方法。
注意【调用时,实例方法约束少,类方法有局限】: 类中的实例方法可以互相调用,并可调用类方法。类方法也能相互调用,但不能直 接调用实例方法,除非类方法引入局部对象,然后通过局部对象调用实例方法。 另外,类方法能直接引用类变量,不能引用实例变量。实例方法可引用实例变量, 也可引用类变量。 【例外】实例方法必须通过对象调用,不能通过类名调用。类方法除了可以通过实 例对象调用之外,还可以通过类名调用。
3.2 Java的类和对象
(3) 对象的内存模型
Java 语言将类型分成基本类型和引用类型两种。 第2章介绍的整型、浮点型、字符型等是基本类型,程序引用这种类型 的变量,采用直接访问形式。
在 Java 语言中,数组类型和类是引用类型。程序访问引用类型的变量 采用间接访问方式。
3.2 Java的类和对象
3.2 Java的类和对象 3.3 接口 3.4 基本类 3.5 Java小应用程序基础
3.1 面向对象的基本概念
程序设计语言发展经历了面向机器、面向过 程和面向对象3个阶段:
面向机器的语言编写程序(如汇编) ,编程模式是: 程序=数据 +指令
面向过程阶段是使用高级程序设计语言编程(如 FORTRAN、 PASCAL、C、COBOL 等),编程模式是: 程序=数据结构+算 法。特点是:结构化控制结构和模块化设计。缺点是:不适宜应用 于图形用户界面、事件驱动编程,难以开发超大规模的应用程序。
面向对象编程语言有Smalltalk、C++、Java 等,编程模式为: 程 序=对象+消息 。最大优点在于重用。
3.1 面向对象的基本概念
1. 抽象: (关注概念,忽略细节)
抽象(abstraction)是程序设计中最经常使用的技术之 一,因为抽象是有效控制程序复杂性的重要手段。
在设计初始阶段,采用自顶向下的设计方法,暂时不关 心具体细节,首先设计出抽象的算法;随后,抽象的算 法步骤逐步被具体的实现替换。