第04章 面向对象技术基础课件.ppt
第4章 面向对象程序设计基础,主要内容,4.1 面向对象的基本概念4.2 类的定义4.3 类和对象的使用 4.4 包package4.5 成员变量及方法的访问权限4.6 final、this及其它,4.1面向对象编程的概念,面向对象程序设计基本思想:将数据以及对于这些数据的操作,封装在一个单独的数据结构中。所有的对象都同时拥有属性以及与这些属性相关的行为。对象之间的联系是通过消息来实现的。基本概念:类、对象、封装、继承、消息三大特点封装、继承、多态,4.1面向对象编程的概念,1)封装封装就是把对象的属性和和对这些属性的操作封装在一个单独的数据结构中,并尽可能隐蔽对象的内部细节,包含两个含义:把对象的全部属性和对属性的全部操作结合在一起,形成一个不可分割的独立单元(即对象)。信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成一个边界或者说形成一道屏障,只保留有限的对外接口使之与外部发生联系。,4.1.1面向对象编程的概念,2)继承继承是一种由已有的类创建新类的机制.利用继承,我们可以先创建一个拥有共有属性的一般类,根据该一般类再创建具有特殊属性的新类。新类继承一般类的状态和行为,并根据需要增加它自己的新的状态和行为。由继承而得到的类称为子类,被继承的类称为父类或超类。Java不支持多重继承,子类只能有一个父类。,4.1.1面向对象编程的概念,3)多态对象的多态是由封装和继承引出的面向对象程序设计语言的另一特征。多态主要体现在两个方面:方法重载时实现的静态多态和方法重写时实现的动态多态。,第4章 面向对象程序设计基础,4.1 面向对象的基本概念4.2 类的定义4.3 类和对象的使用 4.4 包package4.5 成员变量及方法的访问权限4.6 final、this及其它,4.2 类的定义,4.2.1 类声明4.2.2 类体4.2.3 实例化对象4.2.4 构造方法说明 4.2.5 对象的清除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 Shop,4.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.2 类的定义4.3 类和对象的使用 4.4 包package4.5 成员变量及方法的访问权限4.6 final、this及其它,4.4 包package,4.4.1 package语句4.4.2 import语句4.4.3 编译和运行包,4.4 包package,由于Java编译器为每个类生成一个字节码文件,且文件名与类名相同,因此同名的类有可能发生冲突。为了解决这一问题,Java提供包来管理类名空间。包实际上提供了一种命名机制和可见性限制机制。package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包。(若缺省该语句,则指定为无名包)。Java系统必须支持至少一个无名包(缺省包),一般为当前目录。在开发小的或者临时的应用程序或者刚刚开始开发时,用无名包是非常方便的。,4.4.1 package语句,package语句的格式为:package pkg1pkg2pkg3;Java编译器把包对应于文件系统的目录。例如:名为myPackage的包中,所有类文件都将存储在目录myPackage下。同时,package语句中,用“.”来指明目录的层次,例如:package java.awt.image;package;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 编译和运行包,在JDK中编译以下程序:package p1;public class HelloWorldApppublic static void main(String args)System.out.println(“Hello World!”);,4.4.3 编译和运行包,带包编译:javac d.HelloWorldApp.java带包运行:java p1.HelloWorldApp,第4章 面向对象程序设计基础,4.1 面向对象的基本概念4.2 类的定义4.3 类和对象的使用 4.4 包package4.5 成员变量及方法的访问权限4.6 final、this及其它,4.5 成员变量及方法的访问权限,在Java中,对于成员变量和成员方法可以选择四种访问方式:public、private、protected和缺省.,4.5 成员变量及方法的访问权限,公共类型(public)如果声明一个成员变量或成员方法的访问类型为public,则位于不同包中的类都可以访问公共类型的成员变量。保护类型(protected)声明为protected访问类型的成员变量或成员方法,只能够被该类内部、子类和相同包中的类访问。缺省类型如果成员变量或成员方法为缺省类型,则能够被该类内部和相同包中的类访问。私有类型(private)如果一个变量或成员声明为私有类型,则该变量或方法只能在同一类中被访问。,第4章 面向对象程序设计基础,4.1 面向对象的基本概念4.2 类的定义4.3 类和对象的使用 4.4 包package4.5 成员变量及方法的访问权限4.6 final、this及其它,4.6 final、this及其它,4.6.1 final关键字4.6.2 this、super、null关键字4.6.5 java.lang.Object类4.6.4 JAR文件的使用,4.6.1 final关键字,1)final修饰成员变量如果一个成员变量前面有final修饰,那么这个成员变量就变成了常量,一经赋值,就不允许在程序的其他地方修改。2)final修饰方法方法的final修饰符表明方法不能被子类覆盖。带有final修饰符的方法称为最终方法。3)final类final类不能被继承。,4.6.2 this、super、null,关键字this是用来指向当前对象或类实例的。例如:class Demothis int a;/成员变量 public Demothis(int a)this.a=a;super关键字指明是对父类的引用。super.variable;super.method(para_list);super(para_list)null表示类或者变量是空,不代表任何对象或实例。,4.6.3 java.lang.Object类,类java.lang.Object处于java开发环境的类层次的根部,其它所有的类都是直接或间接地继承了此类。该类定义了一些最基本的状态和行为。,4.6.4 JAR文件的使用,JAR 文件就是 Java Archive File,是 Java 的一种文档格式。包含了一个 META-INF/MANIFEST.MF 文件。使用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.jar,4.6.4 JAR文件的使用,我们还可以将这个jar 文件存放到Java 运行环境的扩展类目录下,即将该jar 文件存放在JDK 安装目录的jrelibext 文件夹中.这样,其他的程序就可以使用这个jar文件中的类来创建对象了。有关jar.exe的详细使用方法详见JDK帮助文档。,