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