第04章-面向对象技术基础课件.ppt
第第4章章 面向对象程序设计基础面向对象程序设计基础主要内容主要内容4.1 4.1 面向对象的基本概念面向对象的基本概念面向对象的基本概念面向对象的基本概念4.2 4.2 类的定义类的定义类的定义类的定义4.3 4.3 类和对象的使用类和对象的使用类和对象的使用类和对象的使用 4.4 4.4 包包包包packagepackage4.5 4.5 成员变量及方法的访问权限成员变量及方法的访问权限成员变量及方法的访问权限成员变量及方法的访问权限4.6 final4.6 final、thisthis及其它及其它及其它及其它 4.1面向对象编程的概念面向对象编程的概念 面向对象程序设计面向对象程序设计面向对象程序设计面向对象程序设计n n基本思想基本思想基本思想基本思想:n将数据以及对于这些数据的操作,封装在一个单独的数据将数据以及对于这些数据的操作,封装在一个单独的数据结构中。结构中。n所有的对象都同时拥有属性以及与这些属性相关的行为。所有的对象都同时拥有属性以及与这些属性相关的行为。n对象之间的联系是通过消息来实现的。对象之间的联系是通过消息来实现的。n n基本概念:基本概念:基本概念:基本概念:n类、对象、封装、继承、消息类、对象、封装、继承、消息n n三大特点三大特点三大特点三大特点n封装、继承、多态封装、继承、多态4.1面向对象编程的概念面向对象编程的概念 1 1)封装)封装)封装)封装n封装就是把对象的属性和和对这些属性的操作封装在一个封装就是把对象的属性和和对这些属性的操作封装在一个单独的数据结构中,并尽可能隐蔽对象的内部细节单独的数据结构中,并尽可能隐蔽对象的内部细节,包含,包含两个含义:两个含义:n把对象的全部属性和对属性的全部操作把对象的全部属性和对属性的全部操作结合结合在一起,在一起,形成一个不可分割的独立单元(即对象)。形成一个不可分割的独立单元(即对象)。n信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成一个一个边界边界或者说形成一道屏障或者说形成一道屏障,只保留有限的对,只保留有限的对外接口使之与外部发生联系。外接口使之与外部发生联系。4.1.1面向对象编程的概念面向对象编程的概念 2 2)继承)继承)继承)继承n继承是一种由已有的类创建新类的机制继承是一种由已有的类创建新类的机制.n利用继承利用继承,我们可以先创建一个拥有共有属性的一般类我们可以先创建一个拥有共有属性的一般类,根根据该一般类再创建具有特殊属性的新类。据该一般类再创建具有特殊属性的新类。n新类继承一般类的状态和行为新类继承一般类的状态和行为,并根据需要增加它自己的并根据需要增加它自己的新的状态和行为。由继承而得到的类称为新的状态和行为。由继承而得到的类称为子类子类,被继承的被继承的类称为类称为父类父类或或超类超类。nJava不支持多重继承,子类只能有一个父类。不支持多重继承,子类只能有一个父类。4.1.1面向对象编程的概念面向对象编程的概念 3)多态)多态n对象的多态是由封装和继承引出的面向对象程序设计语言对象的多态是由封装和继承引出的面向对象程序设计语言的另一特征。的另一特征。n多态主要体现在两个方面:方法重载时实现的多态主要体现在两个方面:方法重载时实现的静态多态静态多态和和方法重写时实现的方法重写时实现的动态多态动态多态。第第4章章 面向对象程序设计基础面向对象程序设计基础4.1 4.1 面向对象的基本概念面向对象的基本概念面向对象的基本概念面向对象的基本概念4.2 4.2 类的定义类的定义类的定义类的定义4.3 4.3 类和对象的使用类和对象的使用类和对象的使用类和对象的使用 4.4 4.4 包包包包packagepackage4.5 4.5 成员变量及方法的访问权限成员变量及方法的访问权限成员变量及方法的访问权限成员变量及方法的访问权限4.6 final4.6 final、thisthis及其它及其它及其它及其它 4.2 类的定义类的定义4.2.1 4.2.1 类声明类声明类声明类声明4.2.2 4.2.2 类体类体类体类体4.2.3 4.2.3 实例化对象实例化对象实例化对象实例化对象4.2.4 4.2.4 构造方法说明构造方法说明构造方法说明构造方法说明 4.2.5 4.2.5 对象的清除对象的清除对象的清除对象的清除4.2.6 4.2.6 方法重载方法重载方法重载方法重载4.2.1类声明类声明类声明的格式如下:类声明的格式如下:修饰符修饰符 class 类名类名 extends 父类名父类名 implements接口接口名列表名列表 修饰符可能的选项有:修饰符可能的选项有:publicabstract|final public(公共):public修饰的类能被所有的类访问。abstract(抽象):abstract修饰的类不能被实例化,它包含 有未实现的方法。final(最终):final修饰的类不能被继承,即不能有子类。注意:abstract和final不能同时作为一个类的修饰符。当一个类有多个修饰符时,这些修饰符无先后顺序之分。4.2.1类声明类声明extends(继承继承):extends保留字用来表明新创建的类继承哪个类,被继承的类称为此类的父类。extends后面只能跟一个父类名。implements(实现实现):用来表明这个类实现了哪些接口,接口名可以有多个。例如:下面的类是合法的:class MyClass /空类,没有任何用处,但是合法 又如:下面的Rectangle类继承了Shapes父类,实现了接口Display,是一个公共类。public class Rectangle extends Shapes implement Display /类体4.2.2类体类体 类体中定义了该类所有的成员变量和该类所支持的方法,其格式说明如下:成员变量说明成员变量说明 成员方法说明成员方法说明 4.2.2类体类体 1成员变量说明成员变量说明 成员变量又称值域。成员变量定义在类中,是类成员的一部分,整个类都可以访问它。Java中成员变量说明形式如下:修饰符修饰符 成员变量类型成员变量类型 成员变量名列表成员变量名列表;例如:private int number;成员变量的修饰符有以下几种:缺省访问修饰符、public、protected、private、final、static、transient和volatile。关于这些修饰符的含义以后将讲到。4.2.2类体类体 2成员变量使用成员变量使用(1)类的成员变量在)类的成员变量在定义它的类内部定义它的类内部,可以直接通过成员变,可以直接通过成员变量名来访问。量名来访问。类成员变量类成员变量类变量(用类变量(用static修饰)修饰)实例变量实例变量(2)从类的)从类的外部外部访问,类变量和实例变量的使用方法是不同。访问,类变量和实例变量的使用方法是不同。访问类变量的格式:访问类变量的格式:类名.类变量类变量名 访问实例变量的格式如下:访问实例变量的格式如下:对象名.实例变量名 class Circle static final float PI=3.1415926f;/常量常量 private Point center;/private float radius;/实例变量实例变量 static Color color;/类变量类变量 public float area;float getArea()/实例方法实例方法 area=radius*radius*PI;return area;/内部访问成员变量内部访问成员变量 访问:访问:Circle c1=new Circle();/c1是对象名是对象名System.out.println(“area=”+c1.area);System.out.println(“Color=”+Circle.color);4.2.2类体类体 3、成员方法说明、成员方法说明 Java通过类的方法,改变对象的状态。通过类的方法,改变对象的状态。方法说明分为方法说明分为方法首部说明方法首部说明和和方法体方法体两部分。两部分。方法首部说明的格式如下:方法首部说明的格式如下:方法修饰符 返回值类型 方法名(形参列表)throws异常列表 方法修饰符可能的选项有:方法修饰符可能的选项有:public|protected|private staticfinal|abstract native synchronized 4.方法体方法体 方法体是实现这个方法的代码段,它由方法体是实现这个方法的代码段,它由“”和和“”括起来的括起来的语句序列构成。语句序列构成。4.2.2类体类体 5方法的调用方法的调用 成员方法又分为成员方法又分为类方法(静态方法)类方法(静态方法)和和对象方法(实例方法)对象方法(实例方法)两类。两类。类方法调用形式如下:类名.类方法名(实参列表)对象方法调用形式如下:对象名.对象方法名(实参列表)4.2.3 实例化对象实例化对象通过声明和定义类,只是给出了创建对象的模板通过声明和定义类,只是给出了创建对象的模板.当使用一个类创建了一个对象时当使用一个类创建了一个对象时,我们也说我们给出了这个类我们也说我们给出了这个类的一个实例。的一个实例。通常的格式为:通常的格式为:Type objectName=new Type(parameterList);创建一个对象包括对象的声明、为对象分配内存空间和赋初创建一个对象包括对象的声明、为对象分配内存空间和赋初值三个步骤。值三个步骤。1、对象的声明格式为:、对象的声明格式为:类的名字类的名字 对象名字对象名字2、为声明的对象分配内存.使用new 运算符和类的构造方法为声明的对象分配内存3、执行构造方法,进行初始化。4.2.3 实例化对象实例化对象【例4-1】下面的例子将建立雇员信息类EmpInfo,并实例化对象,然后打印出若干信息。/EmpInfo.javapublic class EmpInfo String name;/雇员的姓名 String designation;/雇员的职务 String department;/雇员的部门 void print()/成员方法 System.out.println(name+is +designation+at +department);4.2.3 实例化对象实例化对象 public static void main(String args)EmpInfo employee=new EmpInfo();/创建对象并实例化 employee.name=Robert Javaman ;/给成员变量赋值 employee.designation=Manager ;/给成员变量赋值 employee.department=Coffee Shop ;/给成员变量赋值 employee.print();/调用方法print()运行结果如下:Robert Javaman is Manager at Coffee Shop4.2.4构造方法构造方法每当由类构造对象时都要调用该类特定的构造方法,在Java中,每个类都至少有一个构造方法。构造方法可以确保用户正确地构造类的对象,同时,构造方法也会对对象作初始化工作。构造方法说明形式如下:构造方法修饰符构造方法修饰符 方法名(方法名(形式参数列表形式参数列表)throws异常列表异常列表 方法体方法体 构造方法修饰符与一般方法修饰符相同 一个类的构造方法可以有多个,它们都具有相同的方法名,即类名。编译器根据参数的类型来决定调用哪个构造方法。这就是构造方法的多态。4.2.4构造方法构造方法构造方法分为:缺省的构造方法、带参数的构造方法。(1)缺省的构造方法 如果类的定义没有编写构造方法,Java语言会自动为用户提供。这个由Java自动提供的构造方法就是所谓的缺省构造方法。缺省的构造方法确保每个Java类都至少有一个构造方法,该方法应符合方法的定义。(2)带参数的构造方法 带有参数的构造方法能够实现这样的功能:当构造一个新对象时,类构造方法可以按需要将一些指定的参数传递给对象的变量。4.2.5 对象的清除对象的清除通过垃圾收集器周期性地释放无用对象所使用的内存,完成对象的清除。垃圾收集器作为一个线程运行,当系统的内存用尽或程序中调用System.gc()要求进行垃圾收集时,垃圾收集线程与系统同步运行,否则垃圾收集器在系统空闲时异步地执行。在对象作为垃圾被收集器释放前,Java运行时系统会自动调用对象的方法finialize()。protected void finalize()throws Throwable/撤销对象 finalize()方法是类java.lang.Object中最基本的方法。4.2.6 方法重载方法重载 方法重载(Method Overloading)就是一个类中可以有多个方法具有相同的名字,但这些方法的参数方法的参数必须不同:即或者是参数的个数参数的个数不同,或者是参数的类型参数的类型不同。从另外的含义上来讲,重载也可以看成是同一个方法具有不同的版本,每个版本之间在参数特征和返回值方面有差别。重载是Java实现多态性的一种方式。当调用一个重载方法时,JVM自动根据当前对方法的调用形式在类的定义中匹配形式符合的成员方法,匹配成功后,执行参数类型、数量均相同的成员方法。方法重载在Java的API类库中得到大量的使用。第第4章章 面向对象程序设计基础面向对象程序设计基础4.1 4.1 面向对象的基本概念面向对象的基本概念面向对象的基本概念面向对象的基本概念4.2 4.2 类的定义类的定义类的定义类的定义4.3 4.3 类和对象的使用类和对象的使用类和对象的使用类和对象的使用 4.4 4.4 包包包包packagepackage4.5 4.5 成员变量及方法的访问权限成员变量及方法的访问权限成员变量及方法的访问权限成员变量及方法的访问权限4.6 final4.6 final、thisthis及其它及其它及其它及其它 4.4 包包package4.4.1 package4.4.1 package语句语句语句语句4.4.2 import4.4.2 import语句语句语句语句4.4.3 4.4.3 编译和运行包编译和运行包编译和运行包编译和运行包4.4 包包packagen n由于由于由于由于JavaJava编译器为每个类生成一个字节码文件,且文件名与编译器为每个类生成一个字节码文件,且文件名与编译器为每个类生成一个字节码文件,且文件名与编译器为每个类生成一个字节码文件,且文件名与类名相同,因此同名的类有可能发生冲突。为了解决这一问类名相同,因此同名的类有可能发生冲突。为了解决这一问类名相同,因此同名的类有可能发生冲突。为了解决这一问类名相同,因此同名的类有可能发生冲突。为了解决这一问题,题,题,题,JavaJava提供包来管理类名空间提供包来管理类名空间提供包来管理类名空间提供包来管理类名空间。包实际上提供了一种命名。包实际上提供了一种命名。包实际上提供了一种命名。包实际上提供了一种命名机制和可见性限制机制。机制和可见性限制机制。机制和可见性限制机制。机制和可见性限制机制。n npackagepackage语句作为语句作为语句作为语句作为JavaJava源文件的第一条语句,指明该文件中源文件的第一条语句,指明该文件中源文件的第一条语句,指明该文件中源文件的第一条语句,指明该文件中定义的类所在的包。定义的类所在的包。定义的类所在的包。定义的类所在的包。(若缺省该语句,则指定为无名包若缺省该语句,则指定为无名包若缺省该语句,则指定为无名包若缺省该语句,则指定为无名包)。n nJavaJava系统必须支持至少一个系统必须支持至少一个系统必须支持至少一个系统必须支持至少一个无名包无名包无名包无名包(缺省包),一般为当前(缺省包),一般为当前(缺省包),一般为当前(缺省包),一般为当前目录。在开发小的或者临时的应用程序或者刚刚开始开发时,目录。在开发小的或者临时的应用程序或者刚刚开始开发时,目录。在开发小的或者临时的应用程序或者刚刚开始开发时,目录。在开发小的或者临时的应用程序或者刚刚开始开发时,用无名包是非常方便的。用无名包是非常方便的。用无名包是非常方便的。用无名包是非常方便的。4.4.1 package语句语句packagepackage语句的格式为:语句的格式为:语句的格式为:语句的格式为:package pkg1package pkg1pkg2pkg2pkg3pkg3;JavaJava编译器把包对应于文件系统的目录编译器把包对应于文件系统的目录编译器把包对应于文件系统的目录编译器把包对应于文件系统的目录。例如:名为。例如:名为。例如:名为。例如:名为myPackagemyPackage的包中,所有类文件都将存储在目录的包中,所有类文件都将存储在目录的包中,所有类文件都将存储在目录的包中,所有类文件都将存储在目录myPackagemyPackage下。同时,下。同时,下。同时,下。同时,packagepackage语句中,用语句中,用语句中,用语句中,用“.”来指明目来指明目来指明目来指明目录的层次,例如:录的层次,例如:录的层次,例如:录的层次,例如:package java.awt.imagepackage java.awt.image;package ;package ;package myPackage;package myPackage;4.4.2 import语句语句 为了能使用Java中已提供的类,我们需要用import语句来引入所需要的类。其格式为 import package1.package2.(classname|*);import语句其中package1package2表明包的层次,与package语句相同,它对应于文件目录,classname则指明所要引入的类,如果要从一个包中引入多个类,则可以用星号(*)来代替。例如:import java.util.Date;import java.util.*;import javax.swing.event.*;4.4.3 编译和运行包编译和运行包n n在在JDK中编译以下程序:中编译以下程序:package p1;package p1;public class HelloWorldApppublic class HelloWorldApppublic static void main(String args)System.out.println(“Hello World!”);4.4.3 编译和运行包编译和运行包n n带包编译:带包编译:带包编译:带包编译:njavac d.HelloWorldApp.javan n带包运行:带包运行:带包运行:带包运行:njava p1.HelloWorldApp第第4章章 面向对象程序设计基础面向对象程序设计基础4.1 4.1 面向对象的基本概念面向对象的基本概念面向对象的基本概念面向对象的基本概念4.2 4.2 类的定义类的定义类的定义类的定义4.3 4.3 类和对象的使用类和对象的使用类和对象的使用类和对象的使用 4.4 4.4 包包包包packagepackage4.5 4.5 成员变量及方法的访问权限成员变量及方法的访问权限成员变量及方法的访问权限成员变量及方法的访问权限4.6 final4.6 final、thisthis及其它及其它及其它及其它 4.5 成员变量及方法的访问权限成员变量及方法的访问权限 在在在在JavaJava中中中中,对对对对于于于于成成成成员员员员变变变变量量量量和和和和成成成成员员员员方方方方法法法法可可可可以以以以选选选选择择择择四四四四种种种种访访访访问问问问方方方方式式式式:publicpublic、privateprivate、protectedprotected和缺省和缺省和缺省和缺省.4.5 成员变量及方法的访问权限成员变量及方法的访问权限n n公共类型(公共类型(公共类型(公共类型(publicpublic)n如如果果声声明明一一个个成成员员变变量量或或成成员员方方法法的的访访问问类类型型为为public,则则位位于不同包中的类都可以访问公共类型的成员变量。于不同包中的类都可以访问公共类型的成员变量。n n保护类型(保护类型(保护类型(保护类型(protectedprotected)n声声明明为为protected访访问问类类型型的的成成员员变变量量或或成成员员方方法法,只只能能够够被被该类内部、子类和相同包中的类访问。该类内部、子类和相同包中的类访问。n n缺省类型缺省类型缺省类型缺省类型n如如果果成成员员变变量量或或成成员员方方法法为为缺缺省省类类型型,则则能能够够被被该该类类内内部部和和相相同包中的类访问。同包中的类访问。n私有类型(私有类型(private)n如如果果一一个个变变量量或或成成员员声声明明为为私私有有类类型型,则则该该变变量量或或方方法法只只能能在在同一类中被访问。同一类中被访问。第第4章章 面向对象程序设计基础面向对象程序设计基础4.1 4.1 面向对象的基本概念面向对象的基本概念面向对象的基本概念面向对象的基本概念4.2 4.2 类的定义类的定义类的定义类的定义4.3 4.3 类和对象的使用类和对象的使用类和对象的使用类和对象的使用 4.4 4.4 包包包包packagepackage4.5 4.5 成员变量及方法的访问权限成员变量及方法的访问权限成员变量及方法的访问权限成员变量及方法的访问权限4.6 final4.6 final、thisthis及其它及其它及其它及其它 4.6 final、this及其它及其它 4.6.1 final4.6.1 final关键字关键字关键字关键字4.6.2 this4.6.2 this、supersuper、nullnull关键字关键字关键字关键字4.6.5 java.lang.Object4.6.5 java.lang.Object类类类类4.6.4 JAR4.6.4 JAR文件的使用文件的使用文件的使用文件的使用4.6.1 final关键字关键字1)final修饰成员变量修饰成员变量如果一个成员变量前面有如果一个成员变量前面有final修饰,那么这个成员变量修饰,那么这个成员变量就变成了就变成了常量常量,一经赋值,就不允许在程序的其他地方,一经赋值,就不允许在程序的其他地方修改。修改。2)final修饰方法修饰方法方法的方法的final修饰符表明方法不能被子类覆盖。带有修饰符表明方法不能被子类覆盖。带有final修饰符的方法称为修饰符的方法称为最终方法最终方法。3)final类类final类不能被继承。类不能被继承。4.6.2 this、super、nulln关键字this是用来指向当前对象或类实例的。例如:class Demothis int a;/成员变量 public Demothis(int a)this.a=a;nsuper关键字指明是对父类的引用。super.variable;super.method(para_list);super(para_list)nnull表示类或者变量是空,不代表任何对象或实例。4.6.3 java.lang.Object类类类java.lang.Object处于java开发环境的类层次的根部,其它所有的类都是直接或间接地继承了此类。该类定义了一些最基本的状态和行为。4.6.4 JAR文件的使用文件的使用nJAR 文件就是 Java Archive File,是 Java 的一种文档格式。n包含了一个 META-INF/MANIFEST.MF 文件。n使用jar.exe 把一些文件压缩成一个JAR文件,来发布我们的应用程序。4.6.4 JAR文件的使用文件的使用JAR文件的制作步骤如下:假设应用程序中有两个类A、B,其中A类是主类(其中包含了main()方法).1)首先用文本编辑器比如Windows下的记事本编写一个清单文件/Mymoon.mfManifest-Version:1.0Main-Class:ACreated-By:1.2.2(Sun Microsystems Inc.)比如,保存Mymoon.mf 到D:userchap04.需要注意的是在编写清单文件时,在”Manifest-Version”和“1.0”之间,”Main-Class”和主类”A”之间,以及”Created-By”和”1.2.2”之间必须有且只有一个空格.4.6.4 JAR文件的使用文件的使用2)生成JAR文件D:userchap04jar cfm Tom.jar Mymoon.mf A.class B.class其中:c 表示要生成一个新的JAR 文件f 表示要生成的JAR 文件的名字m 表示文件清单文件的名字。我们在发布我们的软件时,还可以再写一个有如下内容的bat文件Tom.batTom.bat文件中内容如下:java-jar Tom.jar4.6.4 JAR文件的使用文件的使用 我们还可以将这个jar 文件存放到Java 运行环境的扩展类目录下,即将该jar 文件存放在JDK 安装目录的jrelibext 文件夹中.这样,其他的程序就可以使用这个jar文件中的类来创建对象了。有关jar.exe的详细使用方法详见JDK帮助文档。