当前位置:首页 > 对象和类
第五章 对象和类
本模块是Java编程语言中讨论面向对象语句及面向对象特征两部分中的第一部分。
第一节 相关问题
讨论—下面的问题与本模块中出现的材料相关:
- - -
到目前为止学习的Java编程语言的元素存在于大部分语言中,不管它们是否是面向对象语言。 Java编程语言拥有什么特征使它成为一个面向对象语言? “面向对象”这个术语真正的含义是什么?
第二节 目 标
学完本模块,你便能:
- - - - - - - -
定义封装、多态性以及继承 使用private及public访问修饰符 开发程序段创建并初始化一个对象 对一个特殊对象调用一个方法 描述构造函数及方法重载 描述this引用的用途
讨论为什么Java应用程序代码是可重复使用的 在一个Java程序中,确认:
- -
package语句 import语句
85
- - - - -
类、成员函数以及变量 构造函数 重载方法 覆盖方法 父类构造函数
第三节 对象基础
面向对象程序(OOP)语句能使现实世界中的概念在计算机程序中变成模块。它包括构造程序的特征以及组织数据和算法的机制。OOP语言有三个特征:封装、多态性及继承。所有这些特征与类的概念是息息相关的。
5.3.1 抽象数据类型
当数据类型是由数据项组成时,可以定义许多程序段或方法在该类型数据上专门运行。当程序语言定义一个基本类型如整数时,它同时也定义了许多运算方法(如加法、减法、乘法和除法),因而它可以在该类型的实例中运行。
在许多程序语言中,一旦一个集合数据类型已经定义,程序员定义应用函数在该类型的变量上运行,该变量在代
码和集合类型(除非可能在命名规则中)之间无任何联系。
有些程序语言,包括Java,允许在数据类型的声明和操作该类型变量的代码的声明之间有紧密的联系。这种联系通常被称为抽象数据类型。
5.3.2 类和对象
Java编程语言中的抽象数据类型概念被认为是class。类给对象的特殊类型提供定义。它规定对象内部的数据,创建该对象的特性,以及对象在其自己的数据上运行的功能。因此类就是一块模板。Objects是在其类模块上建立起来的,很象根据建筑图纸来建楼。同样的图纸可用来建许多楼房,而每栋楼房是它自己的一个对象。
应该注意,类定义了对象是什么,但它本身不是一个对象。在程序中只能有类定义的一个副本,但可以有几个对象作为该类的实例。在Java编程语言中使用new运算符实例化一个对象。
在类中定义的数据类型用途不大,除非有目的地使用它们。方法定义了可以在对象上进行的操作,换言之,方法定义类来干什么。因此Java编程语言中的所有方法都属于一类。不象C++程序,Java软件程序不可能在类之外的全局区域有方法。
看一个类的例子:
class EmpInfo { String name;
String designation; String department; }
86
这些变量(name, designation和department)被称为类EmpInfo的成员。
实例化一个对象,创建它,然后如下所述对其成员赋值:
EmpInfo employee = new EmpInfo(); //creates instance employee.name = \ employee.designation = \ employee.department = \
EmpInfo类中的employee对象现在就可以用了。例如: System.out.println(employee.name + \ employee.designation + \ employee.department); 打印结果如下:
Robert Javaman is Manager at Coffee Shop
如下所述,现在可以在类中放入方法print( )来打印数据了。数据和代码可以封装在一个单个实体中,这是面向对象语言的一个基本特征。定名为print( )的代码段可以被作为一个方法而调用,它是术语“函数”的面向对象的称法。 class EmpInfo { String name;
String designation; String department;
void print() {
System.out.println(name + \ } }
一旦对象被创建并被实例化,该方法就打印出类成员的数据。按下述步骤实现: EmpInfo employee = new EmpInfo(); // creates instance
employee.name = \ employee.designation = \ employee.department = \ employee.print();// prints the details
看看集合数据类型MyDate 和对下一个日期赋值的函数tomorrow( )。 按如下所述在MyDate类型和tomorrow( )方法之间创建一种联系:
87
public class MyDate {
private int day, month, year; public void tomorrow() { // code to increment day } }
注—本声明中的“private”一词将在后文描述。 方法不是(作为分离的实体)在数据上运行,而数据(作为对象的一部分)对它本身进行操作。 MyDate d = new MyDate(); d.tomorrow();
这个注释表明行为是由对象而不是在对象上完成的。记住,可以用点记号来指向MyDate类中的字段。
这就意味着“MyDate对象的day字段由变量d.调用。于是,前面的例子“MyDate对象的tomorrow行为由变量d.调用” ,换言之,就是d对象对它本身进行tomorrow()运算。
方法是一个对象的属性并且能作为单个单元的一部分与它所在对象的数据发生密切的相互作用,这个是一个关键的面向对象的概念。(如果与这个概念不同,即,方法是分离的实体,从外部引入,作用在数据上。)message passing(消息传递)这个术语通常用来表达这样一个概念,即:指示一个对象在它本身数据上做某项工作,一个对象的方法定义了该对象能在它本身数据上做什么。
5.3.3 定义方法
定义方法 方法声明采取这样的格式:
88
共分享92篇相关文档