面向对象程序设计基础.ppt

上传人:小飞机 文档编号:5887853 上传时间:2023-08-29 格式:PPT 页数:78 大小:315KB
返回 下载 相关 举报
面向对象程序设计基础.ppt_第1页
第1页 / 共78页
面向对象程序设计基础.ppt_第2页
第2页 / 共78页
面向对象程序设计基础.ppt_第3页
第3页 / 共78页
面向对象程序设计基础.ppt_第4页
第4页 / 共78页
面向对象程序设计基础.ppt_第5页
第5页 / 共78页
点击查看更多>>
资源描述

《面向对象程序设计基础.ppt》由会员分享,可在线阅读,更多相关《面向对象程序设计基础.ppt(78页珍藏版)》请在三一办公上搜索。

1、,第3章 面向对象程序设计基础,本章主要内容,3.1面向对象的基本概念3.2类与对象3.2.1 定义类3.2.2 成员方法3.3 对象3.4 面向对象特性3.4.1 封装性,3.4.2继承性3.4.3多态性3.4.4 其它修饰符的用法3.5接口和包3.5.1接口3.5.2包3.5.3 压缩文件.jar,复习情况检查,分析【例子2-16】的执行过程分析【习题15】的执行过程,3.1面向对象的基本概念,1、对象的基本概念 对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。对象是问题域或实现域中某些事物的一个抽象,反映该事物在系统中需要保存的信息和发挥的作用,是一组属性和有权对这些

2、属性进行操作的一组服务的封装体。从这个角度看,客观世界是由对象和对象之间的联系组成的。,现实世界中的对象有两个共同特征:形态和行为。,图3.2 软件对象的变量和方法,7,2、类的基本概念,类是具有共同属性和行为的对象的抽象。类可以定义为数据和方法的集合。对象具有特殊属性和行为方式的实体。,类,对象,抽象,实例化,封装的实体=数据+方法,操作或行为,属性或状态,方法,数据或变量,一个类的例子,类用class作为它的关键字,例如我们要创建一个汽车类,则可表示为:,用类创建对象实例化,当我们要通过汽车类来创建一个轿车对象,并使用它的刹车行为方法时,则要用下面的格式进行实例化:/实例化汽车对象汽车轿车

3、=new 汽车();/引用汽车对象的刹车方法轿车.刹车();,3.2类与对象,类和对象是Java的核心和本质。它们是Java语言的基础,编写一个Java程序,在某种程度上来说就是定义类和创建对象。定义类和建立对象是Java编程的主要任务。,3.2.1 定义类,1、类的一般形式 类由类声明和类体组成,而类体又由成员变量和成员方法组成(如图3.3所示):,一个具体的类,2、类声明,类声明由四部分组成:类修饰符、类关键字class、声明父类、实现接口,其一般形式如下:,publicabstract|final class 类名 extends 父类名 implements 接口列表,各组成部分的具体

4、说明,(1)类修饰符public:这个public关键字声明了类可以在其他类中使用。缺省时,该类只能被同一个包中的其他类使用。abstract:声明这个类为抽象类,即这个类不能被实例化。final:声明该类不能被继承,即不能有子类。也就是说,不能用它通过扩展的办法来创建新类。,(2)类的关键字class在类声明中,class是声明类的关键字,表示类声明的开始,类声明后面跟着类名,按习惯类名要用大写字母开头,并且类名不能用阿拉伯数字开头。给类名命名时,最好取一个容易识别且有意义的名字,避免A、B、C之类的类名。,(3)声明父类extends为声明该类的父类,这表明该类是其父类的子类。一个子类可以

5、从它的父类继承变量和方法。extends只能实现单继承。创建子类格式:class subclass extends 父类名,17,类的继承,被继承的类称为父类继承父类的类称为子类执行继承时,子类将获得父类的属性,并具有自身特有的属性。,工人类,继承了父类的姓名和性别属性外还包含类别和是否有服装津贴属性,主任类,还包含级别和是否配备交通工具属性,职员类,具有姓名和性别两个属性,(4)实现接口在类声明中使用关键字implements实现接口,当要实现有多个接口时,各接口名以逗号分隔,其形式为:implements 接口1,接口2,,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有

6、变量和方法的实现。一个类可以实现多个接口,以某种程度实现“多继承”。,3、成员变量和局部变量,成员变量(在类体中定义,在整个类中都有效);局部变量(在方法中定义,只在本方法中有效)。,变量,(1)成员变量 最简单的成员变量声明的形式为:类型成员变量名;(2)局部变量在方法中声明的变量以及方法中的参数称为局部变量。(3)如果局部变量名与成员变量名相同,则成员变量被屏蔽。,成员变量与局部变量,class Data int x=12,y=5;public void sum()int s;s=x+y;,x、y是成员变量,类中所有方法都可以使用它们,s是局部变量。仅限于在sum()方法内部使用。,如果局

7、部变量名与成员变量名相同,则成员变量被屏蔽。,class Data int x=12,y=5;public void sum()int x=3;/局部变量x屏蔽了成员变量 int s;s=x+y;,3.2.2 成员方法,在Java中,必须通过方法才能完成对类和对象的属性操作。成员方法只能在类的内部声明并加以实现。一般在类体中声明成员变量之后再声明方法。,1、方法声明,返回类型方法名(形式参数)方法体内容,(1)方法名方法声明包括方法名、返回类型和参数。(2)方法体 方法体是一对大括号“”之间的内容。,【例3-1】教材P59,图3.7 方法声明与调用的运行结果,方法重载,方法重载是指多个方法享有

8、相同的名字,但是这些方法的参数必须不同,或者是参数的个数不同,或者是参数类型不同。返回类型不能用来区分重载的方法。,【例3-2】教材P60,图3.8重载与调用关系,【构造方法】,构造方法是一个特殊的方法,主要用于初始化新创建的对象。构造方法的方法名要求与类名同名,而且无返回值(但不能加void修饰符)。而且,构造方法只能通过new运算符调用,用户不能直接调用。例子3-3(p61)使用缺省构造方法:例子3-4(p62),3.3 对象,类是一个抽象的概念,而对象是类的具体化。类通过实例化生成对象。一个对象的生命周期包括三个阶段:创建、使用和释放。,1、对象的创建,创建对象的一般格式为:类名 对象名

9、=new 类名(参数列表);(1)对象声明:类名 对象名;(2)实例化:对象名=new 构造方法();,2、对象的使用,类是不能直接使用的,我们只能类实例化后的对象。而对象的使用是通过访问对象变量或调用对象方法。通过运算符“.”可以实现对对象的变量访问和方法的调用。,(1)访问对象的变量,访问格式:对象名.成员变量;例如,设有一个A类其结构如下:class A int x;对变量x赋值,先创建并实例化类A的对象a,然后再通过对象给变量x:A a=new A();a.x=5;,(2)调用对象的方法,调用格式:对象名.方法名(参数列表);【例3-5】用带参数的成员方法计算长方体的体积。【例3-6】

10、用对象作为方法的参数计算圆柱体体积。,(3)释放对象,1、java的垃圾收集器自动把没有应用的对 象作为垃圾手机并释放,但优先级比较低;2、可使用系统的System.gc();3、可使用finalize()方法清除对象,this和super关键字,1.this的使用(1)访问当前对象的数据成员(2)访问当前对象的成员变量(3)重载时用来引用同类的其他构造方法2.super的使用(1)访问直接基类中被隐藏的数据成员(2)调用直接基类中被重写的成员方法(3)调用直接基类的构造方法,第3章 面向对象程序设计基础,例子【3-2】例子【IntSum】方法参数接收,3.4 面向对象特性,java语言中有三

11、个典型的面向对象的特性:封装性、继承性和多态性。,面向对象的基本特征:封装定义,面向对象的基本特征:封装举例,“学生对象”的内部数据:个人基本信息(年龄、身高、家庭信息)在校情况(专业,班级,宿舍,任职等)选修课表成绩清单(考试,课程设计,毕业设计成绩),入学/注册修课/考试查询成绩毕业答辩,只能通过接口来操作对象,不能随意修改内部数据,面向对象的基本特征:继承,家电类(父类)数据:功率 品牌 型号方法:启动,停止,电视机类(子类)数据:功率 品牌 型号 尺寸 方法:启动,停止 选频道 调色彩声音,冰箱类(子类)数据:功率 品牌 型号 容量 功能 方法:启动,停止 调温度,开关门,自动拥有父类

12、的数据,方法,继承,子类继承其父类的所有变量和方法还可以增加自己需要的变量和方法,虚框:该类的对象,关于继承性,【例3-7】创建一个A类和它的子类B类,我们通过子类B的实例对象调用从父类A继承的方法。【例子3-8】若子类重写了父类的方法,则系统运行时调用子类的方法;若子类继承了父类的方法(未重写),则系统运行时调用父类的方法。,面向对象的基本特征:多态,家电类(父类)数据:功率 品牌 型号方法:启动,停止,电视机类(子类)数据:功率 品牌 型号 尺寸 方法:启动,停止 选频道 调色彩声音,冰箱类(子类)数据:功率 品牌 型号 容量 功能 方法:启动,停止 调温度,开关门,启动电视:显示图像,声

13、音,启动冰箱:开始制冷,继承,多态:相同的消息被送到不同的对象时有不同的实现,面向对象的基本特征,1.封装:将数据成员(Data Member)和属于此数据的操作方法(Operating Method),放在同一个实体(Entity)或对象中。2.继承:父类定义(Define)一些通用的属性与行为,其子类继续使用。3.多态:在同一个类中可有许多同名的方法,但其参数数量与数据类型不同,而且操作过程与返回值也可能会不同。,(1)模块化(2)信息隐藏,(1)实现代码复用(2)简化设计过程,解决其他语言中不能重名的问题,修饰符,类成员包括数据成员和函数成员,类的每个成员都有一个称为可访问性的属性,用来

14、保护类成员。Java有四种类成员的保护方式,分别为缺省的、public(公有的)、protected(保护的)、private(私有的)。为了使程序具有良好易读的风格,建议最好在撰写类代码时用不同的可访问性来组织类成员,并将public成员作为对外公布的接口放在最前面,以便引起关注。,修饰符,Static关键字,用static修饰的变量或方法称为类变量或类方法如果在声明时用static修饰,则声明为静态变量和静态方法。在调用静态方法时,不要进行实例化而直接调用。例子【3-9】,Final关键字,修饰成员变量:常量修饰成员方法:不能被子类重写修饰类:不能成为超类,类成员和实例成员,带有stati

15、c的为类属性和类方法;不带static的为实例属性和实例方法。,类属性和类方法,class Animal int weight;String colour;static int count=0;Animal()+count;System.out.println(The total number of Animal is:+count);public void eat()System.out.println(Eating);public static void move()System.out.println(Animal can Moving);,成员属性成员方法,类属性和类方法,public

16、 class StaticTest1 public static void main(String args)System.out.println(The total number of Animal is:+Animal.count);Animal.move();Animal a1=new Animal();Animal a2=new Animal();运行结果为:The total number of Animal is:0Animal can MovingThe total number of Animal is:1The total number of Animal is:2,实例属性

17、和实例方法,与类属性和类方法相比较,实例属性和实例方法必须在实例化变量之后才能使用,将上例中Animal.move()换成Animal.eat(),结果如何?为什么?,抽象类和抽象方法,定义目的是提供可由其子类共享的一般形式。抽象类不能实例化。抽象方法没有函数体。抽象方法必须在子类中给出具体实现。抽象类中可以没有抽象方法,有抽象方法的类一定是抽象类。抽象类必须继承,子类根据自身需要扩展抽象类。abstract不能和final叠用修饰类。不能有private成员变量和方法。不能和private、static、final叠用修饰方法。,抽象类和抽象方法,动物有Move方法,动物包括鸟类和鱼类鸟类的

18、Move应该是:Flying鱼类的Move应该是:Swimming要求:设计Fish类的程序设计人员一定要覆盖move方法,。粗心大意的程序设计人员往往会忘记覆盖某些特定的方法,造成程序运行上的错误。Java中提供了一个特殊的机制,能让继承的子类一定要覆盖某个特殊的方法才能创建实例运行,这种机制就是抽象方法和抽象类。,覆盖的含义,动物类数据:颜色方法:运动,鱼类数据:颜色方法:运动(游动),鸟类数据:颜色方法:运动(飞翔),继承,鸟类覆盖了动物类的“运动”方法,鱼类覆盖了动物类的“运动”方法,抽象类和抽象方法,抽象方法:abstract public void move();抽象类(不能生成实

19、例对象)abstract class Animalabstract这个关键字只能用在类和方法上,不能用在属性和一般变量上(不包括常量)。,直接以分号“;”来结束,不用加上左右大括号,抽象类举例,abstract class Animal/抽象类int weight;String colour;public void eat()System.out.println(Eating);abstract public void move();/定义抽象方法class Bird extends Animal public void move()System.out.println(Flying);,cl

20、ass Fish extends Animal public void move()System.out.println(Swimming);public class StaticTest1public static void main(String argv)Bird b1=new Bird();Fish f1=new Fish();b1.move();f1.move();运行结果为:Flying Swimming,可用Animal a=new Animal()来定义实例吗,3.5 接口和包,3.5.1接口,接口是抽象类的一种,只包含常量和方法的定义,而没有变量和具体方法的实现。,1、接口的

21、定义,接口的定义包括接口声明和接口体。接口定义的格式如下:public interface 接口名extends 父接口名/接口体,2、接口的实现,在类的声明中用implements子句来表示一个类使用某个接口,在类体中可以使用接口中定义的常量,而且必须实现接口中定义的所有方法。一个类可以实现多个接口,在implements子句中用逗号分开。,接口举例,例子3-12例子3-13,3.5.2包,package和import语句,Package 用于指出class文件路径,package class文件路径;,Import 用于引用包的类 一个包中通常有多个类,就用*号代替,Import语句,im

22、port类似于C中的include语句 Import java.io.*;Import java.applet.*;,包 package,包不仅是命名空间机制,也是访问控制机制。Java通过包,将命名空间分隔成很多独立的小块,一组相关的类和接口存放在一个独立的包内,从而和其它包中的类或接口区分开。,包的使用,第一步建立和包同名的目录。包和文件系统目录一一对应,有一个包,就有一个和其对应的文件系统目录。包内的所有类或接口都必须在与包同名的目录下。第二步在类或接口所在文件的最前面声明类或接口所在的包。包的声明格式如下:package 包名1.包名2.包名n;,引用包,通过import将包引入程序中

23、,其格式如下:import 包名1.包名n.类名;或import 包名1.包名n.*;,Java自动引入的包,当前包。缺省包,缺省包是无名包。java.lang包,Java基本的语言功能保存在这个包中,例:在当前建立目录:abcxyz.,Import abc.xyz.*;public class apublic static void main(String args)b b1=new b();b1.print();,Package abc.xyz;public class bpublic void print()System.out.println(package test);,把b.jav

24、a保存到abcxyz目录下,a.java保存在当前目录,3.5.3 压缩文件,1、将类压缩为jar文件在Java提供的工具集bin目录下有一个jar.exe文件,它可以把多个类的字节码文件打包压缩成一个jar文件,然后将这个jar文件存放到Java运行环境的扩展框架中,即将该jar文件存放在JDK安装目录的jrelibext下,这样,其他的程序就可以使用这个jar文件中的类来创建对象了。,例:设有Test1.class和Test2.class,我们要将它们压缩成一个jar文件Test.jar。,(1)编写Manifest.mf清单文件Mainfest Version:Main-Class:Te

25、st1 Test2(注意Main-Class:与后面的类名之间要有一个空格,且最后一行要回车换行)。将其保存为Manifest.mf。,(2)生成jar文件jar cfm Test.jar Manifest.mf Test1.class Test2.class其中参数c表示要生成一个新的jar文件,f表示要生成的jar文件的文件名,m表示清单文件的文件名。,2、将应用程序压缩为jar文件,我们还可以用jar.exe将应用程序生成可执行文件。在Windows环境下,我们可用鼠标双击该文件,就可以运行该应用程序。其生成jar文件的步骤与前面生成类的jar文件相同。当要压缩多个类时,我们在清单文件中只要写出主类的类名,设有主类A.class,则:Mainfest Version:Main-Class:A,生成jar文件时,也可以使用通配“*.class”。jar cfm Test.jar Manifest.mf*.class jar命令的有关用法(jar.htm)更加详细的参考,本章结束!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号