Java第4章类和对象基础.ppt
《Java第4章类和对象基础.ppt》由会员分享,可在线阅读,更多相关《Java第4章类和对象基础.ppt(137页珍藏版)》请在三一办公上搜索。
1、第4章 类和对象基础,内容提要,Java语言是面向对象的语言,类和对象是Java语言最基本的要素。,本章要点,本章首先介绍面向对象的基本概念,然后介绍如何定义类、如何定义类的成员变量和成员方法;如何创建和使用对象;如何定义重载方法和构造方法、方法参数的传递;static变量和方法的使用;包的概念和import语句的使用等。,4.1面向对象基础,4.1.1 面向对象的基本概念4.1.2 面向对象的基本特征,4.1.1 面向对象的基本概念,1.对象在现实世界中,对象(object)无处不在。我们身边存在的一切事物都是对象,例如一个人、一辆汽车、一台电视机、一所学校甚至一个地球,这些都是对象。除了这
2、些可以触及的事物是对象外,还有一些抽象的概念,例如一次会议、一场足球比赛、一次账户等也都可以抽象为一个对象。一个对象一般具有两方面的特征:状态和行为。状态用来描述对象的静态特征,行为用来描述对象的动态特征。,4.1.1 面向对象的基本概念,例如,一辆汽车可以用下面的特征描述:生产厂家、颜色、最高时速、出厂年份、价格等。汽车可以启动、加速、转弯和停止等,这些是汽车所具有的行为或者说施加在汽车上的操作。再比如,一场足球比赛可以通过比赛时间、比赛地点、参加的球队和比赛结果等特性来描述。软件对象也是对现实世界对象的状态和行为的模拟,如软件中的窗口就是一个对象,它可以有自己的状态和行为。,4.1.1 面
3、向对象的基本概念,通过上面的说明,可以给“对象”下一个定义,即对象是现实世界中的一个实体,它具有如下特征:有一个状态用来描述它的某些特征。有一组操作,每个操作决定对象的一种功能或行为。,4.1.1 面向对象的基本概念,2.类(class)类是面向对象系统中最重要的概念。在日常生活中经常提到类这个词,如人类、鱼类、鸟类等。类可以定义为具有相似特征和行为的对象的集合,如人类共同具有的区别于其他动物的特征有直立行走、使用工具、使用语言交流等。所有的事物都可以归到某类中。例如,家用电器是一类电子产品。属于某个类的一个具体的对象称为该类的一个实例(instance)。例如,我的汽车是汽车类的一个实例。实
4、例与对象是同一个概念。,4.1.1 面向对象的基本概念,类与实例的关系是抽象与具体的关系。类是多个实例的综合抽象,实例是某个类的个体实物。在Java语言中,类是一种数据类型。对于汽车类(Car)可以通过下面方式定义。public class Carprivate String model;/品牌private double price;/价格private int year;/生产年份public void start()/启动方法public void speedUp(double speed)/加速方法,4.1.1 面向对象的基本概念,public void speedDown(doubl
5、e speed)/减速方法public void stop()/停止方法要创建一个汽车类的实例,可以使用new运算符,例如:Car myCar=new Car();,4.1.1 面向对象的基本概念,3.消息对象与对象之间不是孤立的,它们之间存在着某种联系,这种联系是通过消息传递的。例如,开汽车就是人向汽车传递消息。一个对象发送的消息包含3个方面的内容:接收消息的对象;接收对象采用的方法;方法所需要的参数。请看下面下面两行代码。myCar.start();/启动汽车myCar.speedUp(50);/加速到50公里/小时这里,myCar是接收消息的对象,start()和speedUp()是接收
6、对象采用的方法,50为speedUp()方法的参数。一般发送消息的对象不用指定。,4.1.2 面向对象的基本特征,为支持面向对象的设计原理,所有OOP语言,包括Java在内,都有三个特性:封装性、继承性和多态性。1.封装性封装(encapsulation)就是把对象的状态(属性)和行为(方法)结合成一个独立的系统单位,并尽可能地隐藏对象的内部细节。例如,一辆汽车就是一个封装体,它封装了汽车的状态和操作。封装使一个对象形成两个部分:接口部分和实现部分。对用户来说,接口部分是可见的,而实现部分是不可见的。,4.1.2 面向对象的基本特征,封装提供了两种保护。首先封装可以保护对象,防止用户直接存取对
7、象的内部细节;其次封装也保护了客户端,防止对象实现部分的改变可能产生的副作用,即实现部分的改变不会影响到客户端的改变。在对象中,代码或数据对该对象来说都可以是私有的(private)或公有的(public)。私有代码和数据仅能被对象本身的其他部分访问,不能被该对象外的任何程序部分所访问。当代码或数据是公有的时,虽然它们是定义在对象中的,但程序的其他部分也可以访问。,4.1.2 面向对象的基本特征,类是Java的基本封装单位。类定义了对象的形式,指定了数据和操作数据的代码。Java使用一个类规范来构造对象。对象是类的实例。因此,类在本质上是指定如何构建对象的一系列规定。组成类的代码或数据称为类的
8、成员(member)。具体来说,类定义的数据称为成员变量(member variable)或实例变量(instance variable)。处理这些数据的代码称为成员方法(member method)或简称为方法(method)。方法是子例程在Java中的术语。,4.1.2 面向对象的基本特征,2.继承性继承(inheritance)的概念普遍存在于现实世界中。它是一个对象获得另一个对象的属性的过程。继承之所以重要,是因为它支持层次结构类的概念。我们发现,在现实世界中,许多知识都是通过层次结构方式进行管理的。例如,一个富士苹果是苹果类的一部分,而苹果又是水果类的一部分,水果类则是食物类的一部分
9、。食物类具有的某些特性(可食用,有营养)也适用于它的子类水果。除了这些特性以外,水果类还具有与其他食物不同的特性(多汁、味甜等)。苹果类则定义了属于苹果的特性(长在树上、非热带植物)。,4.1.2 面向对象的基本特征,如果不使用层次结构,那么对象就不得不明确定义出自己的特征。如果使用继承,对象就只需定义使自己在类中不同的属性就可以了,至于基本的属性则可以从自己的父类继承。继承性体现了类之间的是一种(IS-A)关系。类之间的关系还有组合、关联等。,4.1.2 面向对象的基本特征,3.多态性多态性(polymorphism)是面向对象编程语言的一个重要特性。所谓多态,是指一个程序中相同的名字表示不
10、同含义的情况。面向对象的程序中的多态有多种情况。在简单的情况下,在同一个类中定义了多个名称相同的方法,即方法重载,另一种情况是子类中定义的与父类中的方法同名的方法,即方法覆盖。这两种情况都称为多态,且前者称为静态多态,后者称为动态多态。有关Java语言的多态性请参考7.6节的介绍。,4.2 Java类与对象,4.2.1 类的定义 4.2.2 对象的使用4.2.3 用UML图表示类 4.2.4 理解栈与堆,4.2 Java类与对象,本节讨论使用Java语言定义类和创建对象。类和对象这两个术语在Java语言中非常重要。Java程序的所有代码都存放在类中,程序的运行就是各种对象的相互作用。类是组成J
11、ava程序的基本要素,它封装了一类对象的状态和行为,是这一类对象的原形。定义一个新的类,就创建了一种新的数据类型,实例化一个类,就得到一个对象。,4.2.1 类的定义,可以说Java程序一切都是对象。要想得到对象,首先必须定义类(也可以使用事先定义好的类),然后创建对象。先看下面的程序代码。程序4.1 Circle.java,4.2.1 类的定义,程序定义了一个Circle类表示圆,编译该程序可得到一个Circle.class类文件。在该类中定义了一个变量radius表示圆的半径,另外定义了4个方法,分别是设置和返回圆的半径、求圆的周长和面积。其中圆周率使用了常量。有了Circle类,就可以创
12、建该类的对象,然后调用对象的方法完成有关操作,如求一个圆的面积等。,4.2.1 类的定义,一个类的定义包括两个部分:类声明和类体的定义。1.类声明类声明的一般格式为:publicabstract|final class ClassName extends SuperClass implements InterfaceNameList/成员变量声明/成员方法声明,4.2.1 类的定义,说明:(1)类的修饰符类的访问修饰符可以是public或者缺省。若类用public修饰,则该类称为公共类,公共类可被任何包中的类使用。若不加public修饰符,类只能被同一包中的其他类使用。如果类使用abstrac
13、t修饰符,则该类为抽象类,抽象类不能被实例化,即不能创建该类的对象。若用final修饰则该类为最终类,最终类不能被继承。(2)class ClassName类的定义使用class 关键字,ClassName为类名,类名是由类的定义者确定的。一般类名以大写字母开头,如Circle、Employee、MyPoint、ComplexNumber等,这是Java类命名的约定(不是必须的)。,4.2.1 类的定义,(3)extends SuperClass如果一个类要继承某个类需使用extends指明该类的超类,SuperClass为超类名,即定义该类继承了哪个类。如果定义类的时候没有指明所继承的超类,
14、那么它自动继承Object类,Object类是Java的根类。因为Java只支持单继承,所以一个类至多只能有一个超类。有关继承的概念将在7.1节讲述。(4)implements InterfaceNameList该选项定义该类实现哪个或哪些接口。一个类可以实现多个接口,若实现多个接口,接口名中间用逗号分开。有关接口的概念将在7.6节讲述。,4.2.1 类的定义,2.成员变量的定义类声明结束后是一对大括号,大括号括起来的部分称为类体。类体中通常定义两部分内容:成员变量(member variable)和成员方法(member method)。成员变量和成员方法称为成员(members)。成员变量
15、提供类及对象的状态,成员方法实现类及对象的行为。成员变量的声明格式为:public|protected|privatestaticfinaltransientvolatiletype variableName=value;,4.2.1 类的定义,说明:(1)变量的访问修饰符public|protected|private为变量的访问修饰符。用public修饰的变量为公共变量,公共变量可以被任何方法访问;用protected修饰的变量称为保护变量,保护变量可以被同一个包中的类或子类访问;没有使用访问修饰符,该变量只能被同一个包中的类访问;用private修饰的变量称为私有变量,私有变量只能被同一
16、个类的方法访问。(2)实例变量和类变量如果变量用static修饰,则该变量称为类变量,类变量又称为静态变量。没有用static修饰的变量称为实例变量。关于实例变量和类变量的使用,请参阅4.4节。,4.2.1 类的定义,(3)变量类型和变量名type variableName用来指定成员变量的类型和变量名。成员变量的类型可以是任何Java数据类型,包括基本数据类型和引用数据类型。(4)使用final修饰的变量叫作最终变量,也称为标识符常量。常量可以在声明时赋初值,也可以在后面赋初值,一旦为其赋值,就不能再改变了。(5)用transient 修饰的变量称为临时变量。临时变量在对象序列化时不被作为持
17、久状态的一部分存储。(6)用volatile修饰的变量称为共享变量。在多线程的程序中,共享变量可以被异步修改。,4.2.1 类的定义,3.成员方法的定义类体中另一个重要的成份是成员方法。方法用来实现对象的动态特征,也是在类的对象上可完成的操作。成员方法的定义包括方法的声明和方法体的定义,一般格式如下:public|protected|privatestaticfinal|abstractnativesynchronizedreturnType methodName(paramList)throws ExceptionList/方法体,4.2.1 类的定义,说明:(1)方法返回值与方法名meht
18、odName为方法名,每个方法都要有一个方法名。returnType为方法的返回值类型,返回值类型可以是任何数据类型(包括基本数据类型和引用数据类型)。若一个方法没有返回值,则returnType 应为void。例如:public void setRadius(double r),4.2.1 类的定义,(2)方法参数在方法名的后面是一对括号,括号内是方法的参数列表,声明格式为:type paramName1,type paramName2type为参数的类型,paramName为参数名,这里的参数称为形式参数。方法可以没有参数,也可以有一个或多个参数。如果有多个参数,参数的声明中间用逗号分开。
19、例如:public void methodA(String s,int n)该方法声明了两个参数,在调用方法时必须提供相应的实际参数。,4.2.1 类的定义,(3)访问修饰符public、protected和private为方法的访问修饰符。private方法只能在同一个类中被调用,protected方法可以在同一个类、同一个包中的类以及子类中被调用,而用public修饰的方法可以在任何类中调用。一个方法如果缺省访问修饰符,则称包可访问的,即可以被同一个类的方法访问和同一个包中的类访问。(4)实例方法和类方法没有用static修饰的方法称为实例方法,用static修饰的方法称为类方法。关于st
20、atic修饰符的使用,请参阅4.4节。,4.2.1 类的定义,(5)final和abstract方法用final修饰的方法称为最终方法,最终方法不能被覆盖。方法的覆盖与继承有关。用abstract修饰的方法称为抽象方法。(6)synchronized和native修饰符用synchronized修饰的方法称为同步方法。同步方法主要用于开发多线程的程序。有关多线程请参考第13章的内容。用native修饰的方法称为本地方法,本地方法用来调用其他语言(如C语言)编写的函数。,4.2.1 类的定义,(7)声明方法抛出异常如果方法本身对其抛出的异常不处理,可以声明方法抛出异常。异常的声明使用throws
21、关键字,后面给出异常名称的列表。有关异常处理请参阅第8章。提示:在类体中,经常需要定义类的构造方法,构造方法用于创建新的对象。有些专家认为构造方法不是方法,它们也不是类的成员。,4.2.2 对象的使用,有了类就可以创建对象并指定对象的初始状态,然后通过调用对象的方法实现对象的操作。下面程序使用Circle类求给定半径的圆的周长和面积。程序4.2 CircleTest.java,4.2.2 对象的使用,1.创建对象为了使用对象,一般还要声明一个对象名,即声明对象的引用(reference),然后使用new运算符号调用类的构造方法创建对象。对象声明格式如下:TypeName objectName;
22、TypeName为引用类型名,可以是类名也可以是接口名,objectName是对象名或引用名或实例名。例如,在CircleTest类中有如下两条语句:Circle cc=new Circle();,4.2.2 对象的使用,代码声明了一个Circle类的的引用,实际上cc只保存着实际对象的内存地址。当该语句执行后,程序创建了一个实际对象。这里使用new 运算符调用Circle类的构造方法并把对该对象的引用赋给cc。创建一个对象也叫实例化,对象也称为类的一个实例。,4.2.2 对象的使用,若要声明多个同类型的对象名,可用逗号分开。Circle c1,c2;通常在声明对象引用的同时创建对象。Circ
23、le cc=new Circle();Integer i=new Integer(18);/Integer类的对象String s=new String(Hello);/String类的对象Date d=new Date();/Date类的对象若对象仅在创建处使用,也可以不声明引用名,如下面语句直接创建一个Circle对象,然后调用其getRadius()方法。new Circle().getRadius();,4.2.2 对象的使用,2.对象的使用创建了一个对象引用后,就可以通过该引用来操作对象。使用对象主要是通过对象的引用访问对象的成员变量和调用对象的成员方法。例如,在CircleTest
24、.java程序中,使用下面语句访问对象c的成员变量radius和调用对象c的成员方法:System.out.println(半径=+cc.radius);System.out.println(面积=+cc.area();,4.2.2 对象的使用,3.对象引用赋值对于基本数据类型的变量赋值,是将变量的值的一个拷贝赋给另一个变量,例如:int x=10;int y=x;/将x 的值10赋值给变量y对于对象的赋值是将对象的引用(地址)赋值给变量。例如:Circle c1=new Circle();Circle c2=c1;/将c1的引用赋给对象c2,4.2.2 对象的使用,上面的赋值语句执行结果是把
25、c1的引用赋值给了c2,即c1和c2的地址相同,也就是c1和c2指向同一个对象,如图4.3所示。由于引用变量c1和c2指向同一个对象,这时如果修改了c1对象,如执行c1.setRadius(10),则输出c2的半径值也将为10。,4.2.3 用UML图表示类,UML(Unified Modeling Language)称为统一建模语言,它是一种面向对象的建模语言,它运用统一的、标准化的标记和定义实现对软件系统进行面向对象的描述和建模。在UML中可以用类图描述一个类。图4.4是Employee类的类图,它用长方形表示,一般包含三个部分:上面是类名,中间是成员变量清单,下面是方法清单。,4.2.3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 对象 基础
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6510065.html