《第3章面向对象程序设计解析》由会员分享,可在线阅读,更多相关《第3章面向对象程序设计解析(15页珍藏版)》请在金锄头文库上搜索。
1、1,第3章 JAVA面向对象程序设计,主要内容 面向对象的基本概述 类 及类的定义 对象及对象的创建 方法的进一步讨论 本讲小结,2,面向对象概述,软件的需求 技术的发展 软件需求量增大 类和对象 客观世界中的每一个实体都看作是一个对象,根据面向对象的倡导者Grady Booch的理论,对象具有如下特性: 它具有一种状态; 它可以展示一种行为; 它具有唯一的标识。 我们可以简单地把类定义为:“具有共同属性和行为的一系列对象”。,3,面向对象的特点,面向对象的特性 抽象 继承 封装 多态 面向对象的好处 现实的模型 重用性 可扩展性,4,类,类是对现实世界中实体的抽象,是对一组具有共同特征和行为
2、的对象的抽象描述。定义一个类需要如下两个方面: 属于该类对象共有的属性(属性的类型和名称); 属于该类对象共有的行为(所能执行的操作即方法)。 定义类包含类的声明和类体两部分,其一般格式如下: 访问限定符 修饰符 class 类名 extends 父类名 implements 接口名列表/类声明 /类体开始标志 类的成员变量说明 /属性说明 类的构造方法定义 类的成员方法定义 /行为定义 /类体结束标志,5,访问限定符 修饰符 class 类名 extends 父类名 implements 接口名列表, 方括号中的内容为可选项。 访问限定符 public 表明是公有的。 private 表明是
3、私有的。 protected 表明是保护的。只能为其子类所访问。 若没有访问限定符,则系统默认是友元的 (friendly)。 修饰符 abstract 说明该类是抽象类。抽象类不能直接生成对象。 final 说明该类是最终类,最终类是不能被继承的。 class 定义类的标志(注意全是小写)。 类名 是该类的名字,是一个Java标识符,含义应该明确。 extends 父类名 说明所定义的类是该父类的子类 implements 接口名表 该类将实现接口表中的所有接口。,6,定义类,定义公民类 第一步先抽象出公民类的共有的属性及确定属性的数据类型: 姓名 可确定为字符串类型的。 别名 可确定为字符
4、串类型的。 出生日期 可确定为日期或字符串类型的。 性别 可确定为字符串类型或布尔型的。 出生地 可确定为字符串类型的。 身份证 可确定为字符串类型的。 第二步确定构造方法: 构造方法的一般格式: public 类名(形参说明表) /方法体 ,7,定义类,第三步确定行为方法: 定义方法的一般格式如下: 访问限定符 修饰符 返回类型 方法名(形式参数表) throws 异常表 变量声明 /方法内用的变量,局部变量 程序代码 /方法的主体代码 return 表达式 /返回语句 对于公民类来说,需要定义设置、获取或显示其对象属性的方法。如果需要显示所有属性或部分属性,则在方法中安排输出语句输出所需要
5、的属性即可。,abstract、 final 、static、 native 、synchronized,基本类型、类,将在异常中讨论,8,公民(Citizen)类的定义,public class Citizen /类声明 /以下声明成员变量(属性) private String name; String alias; String sex; String brithday; String homeland; private String ID; public Citizen(String name,String alias,String sex, String brithday,String
6、 homeland,String ID) this.name=name; this.alias=alias; this.sex=sex; this.brithday=brithday; this.homeland=homeland; this.ID=ID; ,定义构造方法,9,Citizen类,public String getName() /获取名字方法 /getName()方法体开始 return name; /返回名字 /getName()方法体结束 public void setName(String name) /设置名字方法 /setName()方法体开始 this.name=na
7、me; /setName()方法体结束 public void displayAll() /列出对象的所有属性值 /displayAll()方法体开始 System.out.println(“姓名:”+name); System.out.println(“别名:”+alias); System.out.println(“性别:”+sex); System.out.println(“出生:”+brithday); System.out.println(“出生地:”+homeland); System.out.println(“身份标识:”+ID); /displayAll()方法体结束 ,编译程
8、序,10,对象,声明对象 类名 对象名; 创建对象 对象名=new 类构造方法名(实参表); 或将声明和创建合二为一: 类名 对象名=new 类构造方法名(实参表); 引用对象 一般格式: 对象名.成员变量名 对象名.成员方法名(实参列表),对象引用示例,11,方法的进一步讨论,方法引用及参数传递 方法声明中的形式参数 方法引用中的实际参数 参数传递方式 按值传递方式 按引用传递方式 方法的重载 在一个类中定义了多个相同名字的方法,每个方法具有一组唯一的形式参数和不同的代码,实现不同的功能。重载方法的区分是以它们所带参数的个数及相应参数的数据类型来确定的。方法返回值的类型不能用于区分方法,因为
9、方法可以没有返回值。,方法重载示例,12,静态(static)方法(方法的进一步讨论),以修饰符static修饰的方法被称之为静态方法。 static方法可以在不创建对象的情况下直接由类名引用,所以也被称为类方法。其引用的一般格式如下 : 类名.静态方法名( 实参表 ) 当类被加载到内存之后,类方法就获得了相应的入口地址;该地址在类中是共享的,不仅通过类名引用它,也可以类的对象引用它。实例方法只有在对象创建之后才会获得入口地址,只能被对象所引用。 在类方法里只能引用类中其他静态的成员(静态变量和静态方法),而不能直接访问类中的非静态成员。 不要使用this和super的任何形式引用类方法。当类
10、方法被调用时,this所引用的对象可能还没有产生。 main()是一个静态方法。具有main()方法的类是一个应用程序类,若该类以public声明,则类名必须与程序同名。当装入程序执行时,系统自动从该方法开始执行。,13,最终(Final)方法 (方法的进一步讨论),以final修饰的方法被称之为最终方法; 最终方法不能被子类重写(覆盖); 定义final方法的目的主要是用来防止子类对父类方法的改写以确保程序的安全性。 方法小结 方法声明(访问限制、修饰、返回值、参量) 方法引用(引用方式、实参与形参的对应) 方法重载 静态方法、实例方法 最终方法,14,变量的进一步讨论,实例变量 类中定义的
11、非静态属性被称为实例变量。类的每一个对象都各自拥有自己的属性值。 类变量 类中以static修饰的属性被称为类变量或静态变量。类中所有的对象都可共享它,它属于类。一般引用方法:类名.变量名 最终变量 类中以final修饰的属性被称为最终变量,也称常量。它们一般被修饰为static型的。 注意:类变量在类被装入后,即获得存储空间;实例变量只有在对象被创建后,系统才为它们分配存储空间。,15,本讲小结,本讲主要讲述了面向对象的程序设计的基本概念,面向对象的程序设计是以类为基础的。一个类包含两种成份: 数据成份(变量) 类变量、最终变量(常量) 实例变量 行为成份(方法) 构造方法 一般方法(类方法、实例方法、最终方法) 本讲重点:面向对象程序设计的概念,类的定义方法、各种数据成员和方法成员的概念及定义,对象的定义、创建及引用,方法的重载,方法参数的传递等。,