第4章面向对象基础.ppt
《第4章面向对象基础.ppt》由会员分享,可在线阅读,更多相关《第4章面向对象基础.ppt(96页珍藏版)》请在三一文库上搜索。
1、Java实用教程,第4章 面向对象基础,第 4 章 面向对象基础,4.1 面向对象程序设计 4.2 类 和 对 象 4.3 包 4.4 继 承 4.5 多 态 4.6 特 殊 类 4.7 接 口,面向过程 在一个结构体中定义窗口的大小,位置,颜色,背景等属性,对窗口操作的函数与窗口本身的定义没有任何关系,如HideWindow,MoveWindow,MinimizeWindow,这些函数都需要接受一个代表要被操作的窗口参数 ,是一种谓语与宾语的关系 。 面向对象 定义窗口时,除了要指定在面向过程中规定的那些属性,如大小,位置,颜色,背景等外,还要指定该窗口可能具有的动作 ,如隐藏,移动,最小化
2、等。这些函数被调用时,都是以某个窗口要隐藏,某个窗口要移动的语法格式来使用的 ,这是一种主语与谓语的关系。 面向对象的三大特征 封装 (Encapsulation) 继承 (Inheritance) 多态 (Polymorphism),程序设计所面对的问题域客观世界,是由许多事物构成的,这些事物既可以是有形的(比如一辆汽车),也可以是无形的(比如一次会议)。 把客观世界中的事物映射到面向对象的程序设计中就是对象。对象是面向对象程序设计中用来描述客观事物的程序单位。客观世界中的许多对象,无论其属性还是其行为常常有许多共同性,抽象出这些对象的共同性便可以构成类。所以,类是对象的抽象和归纳,对象是类
3、的实例。,4.1.1. 面向对象的基本概念,只要仔细研究程序设计所面对的问题域客观世界,我们就可以看到:客观世界是由一些具体的事物构成的,每个事物都具有自己的一组静态特征(属性)和一组动态特征(行为)。 例如,一辆汽车有颜色、型号、马力、生产厂家等静态特征,又具有行驶、转弯、停车等动态特征。把客观世界的这一事实映射到面向对象的程序设计中,则把问题域中的事物抽象成了对象(Object),事物的静态特征(属性)用一组数据来描述,事物的动态特征(行为)则用一组方法来刻画。,4.1.2 对象,(1) 对象标识:即对象的名字,是用户和系统识别它的唯一标志。例如,汽车的牌照可作为每一辆汽车对象的标识。对象
4、标识有“外部标识”和“内部标识”之分。外部标识供对象的定义者或使用者用,内部标识供系统内部唯一地识别每一个对象。在计算机世界中,我们可以把对象看成计算机存储器中一块可标识的区域,它能保存固定或可变数目的数据(或数据的集合)。,4.1.2 对象特征,(2) 属性:即一组数据,用来描述对象的静态特征。例如,汽车的颜色、型号、马力、生产厂家等。在Java程序中,把这一组数据称为数据成员。 (3) 方法:也称为服务或操作,它是对象动态特征(行为)的描述。每一个方法确定对象的一种行为或功能。例如,汽车的行驶、转弯、停车等动作可分别用move( )、rotate( )、stop( )等方法来描述。为避免混
5、淆,本书中把方法称为成员方法。,4.1.2 对象特征,在Java程序中,类是创建对象的模板,对象是类的实例,任何一个对象都是隶属于某个类的。Java程序设计是从类的设计开始的,所以,在进一步讲述对象的知识之前,必须先掌握类的概念。,4.1.2 对象特征,对象是对事物的抽象,而类是对对象的抽象和归纳。找出事物的共性,把具有共同性质的事物归结为一类,得出一个抽象的概念类。 在面向对象的编程语言中,类是一个独立的程序单位,是具有相同属性和方法的一组对象的集合。类的概念使我们能对属于该类的全部对象进行统一的描述。例如,“树具有树根、树干、树枝和树叶,它能进行光合作用”。,4.1.3 类,描述一个类需要
6、指明下述三个方面内容: (1) 类标识:类的一个有别于其他类的名字。这是必不可少的。 (2) 属性说明:用来描述相同对象的静态特征。 (3) 方法说明:用来描述相同对象的动态特征。,4.1.3 类,例如,下面是对dog类进行的描述: class dog / class指出这是一个类,dog是类标识 String name; int AverageWeight; 类的属性(静态特征) int AverageHeight; public void move( ) 类的方法(动态特征) public void ShowDog( ) ,dog类,4.2 类 和 对 象,Java语言与其他面向对象语言一
7、样,引入了类和对象的概念,类是用来创建对象的模板,它包含被创建对象的属性和方法的定义。因此,要学习Java编程就必须学会怎样去编写类,即怎样用Java的语法去描述一类事物共有的属性和行为。 对象的属性通过变量来刻画,而对象的行为通过方法来体现。方法可以操作属性形成一定的算法来实现一个具体的功能。类把属性和方法封装成一个整体。,类是对某一类事物的描述,是抽象的、概念上的定义;对象是实际存在的该类事物的每个个体,因而也称实例(instance)。,如果将对象比作汽车,那么类就是汽车的设计图纸。所以面向对象程序设计的重点是类的设计,而不是对象的设计。,4.2 类 和 对 象,4.2.1 定义类,在J
8、ava语言中,类是基本的构成要素,是对象的模板,Java程序中所有的对象都是由类创建的。一个Java类主要包括以下两部分: 类的声明 类的主体,类的声明,在类声明中,需要定义类的名称、对该类的访问权限、该类与其他类的关系等。类声明的格式如下: 修饰符用于指定类的访问权限,可选值为public、abstract和final。,修饰符 class extends 父类名 implements 接口列表 ,类的声明,类名用于指定类的名称,类名必须是合法的Java标识符。一般情况下,要求首字母大写。 extends 父类名用于指定要继承参数。 implements 接口列表用于指定该类实现的所有接口。
9、,类 体,类声明部分大括号中的内容为类体。类体主要由以下两部分构成: (1)成员变量的定义; (2)成员方法的定义。 在程序设计过程中,编写一个能完全描述客观事物的类是不现实的。 比如,构建一个Apple类,该类可以拥有很多很多的属性(即成员变量),在定义该类时,选取程序需要的必要属性和行为就可以了。,类的定义,class Person int age; void shout() System.out.println(“my age is “ + age); age是类的属性 ,也叫类成员变量 。 shout是方法也叫类的成员函数。 shout方法可以直接访问同一个类中的age变量 ,如果一个
10、方法中有与成员变量同名的局部变量,该方法中对这个变量名的访问是局部变量,而不再是成员变量。,4.2.2 了解成员方法,Java中类的行为由类的成员方法来实现。类的成员方法由方法声明和方法体两部分组成。其一般格式如下:,修饰符 ( 参数列表) 方法体 ,4.2.2 了解成员方法,修饰符用于指定方法的访问权限,可选值为public、protected和private。 方法返回值的类型用于指定该方法的返回值的类型,如果该方法没有返回值,必须使用关键字void进行标识。方法返回值的类型可以是任何Java数据类型。,了解成员方法,方法名用于指定成员方法的名称,方法名必须是合法的Java标识符。 参数列
11、表用于指定方法中所需的参数。当存在多个参数时,各参数之间应使用逗号分隔。方法的参数可以是任何Java数据类型。,了解成员方法,方法体是方法的实现部分,在方法体中可以完成指定的工作,可以只打印一句话,也可以省略方法体,使方法什么都不做。需要注意的是:当省略方法体时,其外面的大括号一定不能省略。,4.2.3 成员变量和局部变量,在类体中所声明的变量称为类的成员变量,而在方法体中声明的变量和方法的参数则称为局部变量。 现在我们来看一下,如何声明成员变量和局部变量,以及变量的有效范围。,声明成员变量,Java用成员变量来表示类的状态和属性,声明成员变量的基本语法格式如下: 修饰符:可选参数,用于指定变
12、量的被访问权限,可选值为public、protected和private。 static:可选,用于指定该成员变量为静态变量,可以直接通过类名访问。如果省略该关键字,则表示该成员变量为实例变量。,修饰符 static final ;,声明成员变量,final:可选,用于指定该成员变量为取值不会改变的常量。 变量类型:必选:用于指定变量的数据类型,其值可以为Java中的任何一种数据类型。 变量名:必选,用于指定成员变量的名称,变量名必须是合法的Java标识符。,1访问控制权限,(1)public 公共变量 由public修饰的变量称为公共变量,可被任何包中的任何类访问,只有在确认任何外部访问都不
13、会带来不良后果的情况下才将成员声明为公共的。公共变量对任何类都是可见的,因此它没有秘密可言,不具有数据保护功能。 (2)private私有变量 由private修饰的变量称为私有变量,只能被声明它的类所使用,拒绝任何外部类的访问。私有变量是不公开的,它们得到了最好的保护,这是对类进行封装时使用的主要方法。,(3)protected 受保护变量 由protected修饰的变量称为受保护变量,可被声明它的类和派生的子类以及同一个包中的类访问。 (4)package包变量 由package修饰的变量称为包变量,在声明时常常省略package关键字,即没有修饰符的成员被视为包成员。包成员可被声明它的类
14、和同一个包中的其它类(包括派生子类)所访问,在其它包中的子类则不能访问父类的包成员。,2static 静态变量,static声明的成员变量被视为类的成员变量,而不把它当作实例对象的成员变量。换句话说,静态变量是类固有的,可以直接引用,其它成员变量仅仅被声明,生成实例对象后才存在,才可以被引用。基于这样的事实,也把静态变量称为类变量,非静态变量称为实例变量。相应地,静态方法称为类方法,非静态方法称为实例方法。,从输出结果中可以得出以下几点结论 :,类的静态变量可以直接引用,例如在程序中直接使用了StaticDemo.getX(),而非静态变量则不行。类的静态变量相当于某些程序语言的全局变量。 静
15、态方法只能使用静态变量,不能使用实例变量。 类的静态变量只有一个版本,所有实例对象引用的都是同一个版本。 对象实例化后,每个实例变量都被制作了一个副本,它们之间互不影响。,3final 最终变量,一旦成员变量被声明为final,在程序运行中将不能被改变。这样的成员变量就是一个常量。例如: final double PI=3.14159; 该语句声明一个常量PI,如果在后面试图重新对它赋值,将产生编译错误。另外,常量名一般用大写字母。常量和直接量一样不占用内存空间。,声明成员变量,例如,在类中声明3个成员变量。,public class Apple public String color; /声
16、明公共变量color public static int count; /声明静态变量count public final boolean MATURE=true; /声明常量MATURE并赋值 public static void main(String args) System.out.println(Apple.count); Apple apple=new Apple(); System.out.println(apple.color); System.out.println(apple.MATURE); ,声明局部变量,例如,在grow()成员方法中声明两个局部变量。,public
17、void grow() final boolean STATE; /声明常量STATE int age; /声明局部变量age ,变量的有效范围,变量的有效范围是指该变量在程序代码中的作用区域,在该区域外不能直接访问变量。有效范围决定了变量的生命周期,变量的生命周期是指从声明一个变量并分配内存空间、使用变量,然后释放该变量并清除所占用内存空间的一个过程。进行变量声明的位置,决定了变量的有效范围,根据有效范围的不同,可将变量分为以下两种。,变量的有效范围,(1)成员变量:在类中声明,在整个类中有效。 (2)局部变量:在方法内或方法内的复合代码块( “”与“”之间的代码)中声明的变量。在复合代码块
18、声明的变量,只在当前复合代码块中有效;在复合代码块外、方法内声明的变量在整个方法内都有效。,变量的有效范围,例如下面的实例:,public class Olympics private int medal_All=800; /成员变量 public void China() int medal_CN=100; /方法的局部变量 if(medal_CN1000) /代码块 int gold=50; /代码块的局部变量 medal_CN+=50; /允许访问 medal_All-=150; /允许访问 ,4.2.5 对象生命周期,在Java语言中,把任何事物都看做对象,例如一个人、一个动物,或者没
19、有生命体的轮船、汽车、飞机,甚至概念性的抽象,例如公司业绩。 一个对象在Java语言中的生命周期包括3个阶段: 创建对象 使用对象 销毁对象,创建对象,对象是类的实例。Java定义任何变量都需要指定变量类型,因此,在创建对象之前,一定要先声明该对象。声明对象的一般格式如下: 类名:用于指定一个已经定义的类。 对象名:用于指定对象名称,对象名必须是合法的Java标识符。,类名 对象名;,创建对象,例如声明Apple类的一个对象redApple的代码如下:,Person p1;,创建对象,在声明对象时,只是在内存中为其建立一个引用,并置初值为null,表示不指向任何内存空间。 声明对象以后,需要为
20、对象分配内存,这个过程也称为实例化对象。在Java中使用关键字new来实例化对象,具体语法格式如下:,对象名=new 构造方法名(参数列表);,创建对象,对象名:必选,用于指定已经声明的对象名。 类名:必选,用于指定构造方法名,即类名,因为构造方法与类名相同。 参数列表:可选参数,用于指定构造方法的入口参数。如果构造方法无参数,则可以省略。,创建对象,在声明Apple类的一个对象redApple后,可以通过以下代码为对象redApple分配内存(即创建该对象): 在声明对象时,也可以直接实例化该对象: 这相当于同时执行了对象声明和创建对象:,Person p1=new Person();,p1
21、=new Person();,Person p1; p1=new Person();,Person p1 = new Person(); 执行完后的内存状态,创建对象,当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值。除了基本数据类型之外的都是变量类型都是引用类型,如上面的Person及前面讲过的数组。,创建对象,使用对象,创建对象后,就可以访问对象的成员变量,并改变成员变量的值了,而且还可以调用对象的成员方法。通过使用运算符“.”实现对成员变量的访问和成员方法的调用。 语法格式为:,对象.成员变量 对象.成员方法(),创建新的对象之后,我们就可以使用“ 对象名.对象成员 ”的
22、格式,来访问对象的成员(包括属性和方法) class TestPerson public static void main(String args) Person p1 = new Person(); Person p2 =new Person(); p1.age = -30; p1.shout(); p2.shout(); ,使用对象,上面程序运行的内存布局如下图,使用对象,对象的生命周期,销毁对象,在许多程序设计语言中,需要手动释放对象所占用的内存,但是,在Java中则不需要手动完成这项工作。Java提供的垃圾回收机制可以自动判断对象是否还在使用,并能够自动销毁不再使用的对象,收回对象所占
23、用的资源。 Java提供了一个名为finalize()的方法,用于在对象被垃圾回收机制销毁之前执行一些资源回收工作,由垃圾回收系统调用,可以重写该方法。但是垃圾回收系统的运行是不可预测的。finalize()方法没有任何参数和返回值,每个类有且只有一个finalize()方法。,实现类的封装性,如果外面的程序可以随意修改一个类的成员变量,会造成不可预料的程序错误,就象一个人的身高,不能被外部随意修改,只能通过各种摄取营养的方法去修改这个属性。 在定义一个类的成员(包括变量和方法)时,使用private关键字说明这个成员的访问权限,这个成员成了类的私有成员,只能被这个类的其他成员方法调用,而不能
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 基础
链接地址:https://www.31doc.com/p-2979774.html