第3章:面向对象编程基础
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 修饰的是实例变量。
区别:
每个对象都有自己的实例变量;类变量是类的所有对象共享成员变量,一个类变量 在类中只有一个,它属于整个类,而不属于类的某个对象。 引用类变量途径有两条,或通过类,或通过对象,格式为:类名.类变量名 或 对 象名.类变量名;实例变量只能通过:对象名.实例变量名。 不同对象的实例变量将被分配不同的内存空间,改变类的某一个对象的实例变量的 值不会影响其他对象的实例变量。类变量的内存只有一处,让类的所有对象共享, 从类的任一对象改变类变量,类的其他对象都能发现这个改变。