面向对象的程序设计.ppt

上传人:laozhun 文档编号:2214854 上传时间:2023-02-01 格式:PPT 页数:51 大小:293.50KB
返回 下载 相关 举报
面向对象的程序设计.ppt_第1页
第1页 / 共51页
面向对象的程序设计.ppt_第2页
第2页 / 共51页
面向对象的程序设计.ppt_第3页
第3页 / 共51页
面向对象的程序设计.ppt_第4页
第4页 / 共51页
面向对象的程序设计.ppt_第5页
第5页 / 共51页
点击查看更多>>
资源描述

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

1、面向对象的程序设计,第三章,2,回顾,掌握标识符的定义规则掌握各种简单数据类型的使用掌握运算符和表达式的使用 掌握Java程序简单的输入输出方法了解常用的保留字和分隔符,3,目标,面向对象的基本概念面向对象的三大基本特征。成员变量和成员方法对象的生成和使用。继承和多态的概念及其实现。包和接口的使用。,4,3.1.1 对象,对象是具有某些特殊属性(数据)和行为方式(方法)的实体。可以是有生命的个体,比如一个人或一只老虎。也可以是无生命的个体,比如一辆汽车或一台计算机。也可以是一个抽象的概念,如天气的变化或鼠标所产生的事件。,两个特征:属性(Property)和行为(Behavior)如:一个人的

2、属性有:姓名、性别、年龄、身高、体重等行为有:唱歌、打球、骑车、学习等。,5,从众多对象中归纳出“类”,电视机A品牌:飞利浦型号:34寸高清行为:开 关 选频道 调声音 颜色,抽象,电视机类品牌:型号:行为:,从类实例化一个对象,电视机B品牌:LG型号:21寸纯平行为:开 关 选频道 调声音 颜色,电视机C品牌:东芝型号:44寸液晶行为:开 关 选频道 调声音 颜色,6,对象和类的关系,对象A属性:。行为:。,对象B属性:。行为:。,对象C属性:。行为:。,抽象,类属性:行为:,从类实例化一个对象,7,3.1.2 类,类是具有共同属性和行为的对象的抽象。类可以定义为数据和方法的集合。对象具有特

3、殊属性和行为方式的实体。,类,对象,抽象,实例化,封装的实体=数据+方法,操作或行为,属性或状态,方法,数据或变量,8,3.1.3 消息,单一对象的存在并没有多大的作用,只有多个对象相互作用才会完成复杂的行为。对象和对象之间是通过传递消息来完成相互通信的。一个消息由三方面内容组成:1)消息的接收者,即消息的目标对象;2)接收对象采用的方法;3)执行方法所需用的参数(Parameters)。,例如:一辆自行车放在车棚中并没有什么用,当我们人骑上它,并加速时才体现它的作用,其中接收者(自行车),采用的方法(加速),所需的参数(上升到更高的档位)。,9,面向对象的基本特征:封装定义,10,面向对象的

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

5、框:该类的对象,12,多继承:一个类有多个父类,即直接继承多个类,多继承,13,面向对象的基本特征:多态,家电类(父类)数据:功率 品牌 型号方法:启动,停止,电视机类(子类)数据:功率 品牌 型号 尺寸 方法:启动,停止 选频道 调色彩声音,冰箱类(子类)数据:功率 品牌 型号 容量 功能 方法:启动,停止 调温度,开关门,启动电视:显示图像,声音,启动冰箱:开始制冷,继承,多态:相同的消息被送到不同的对象时有不同的实现,14,面向对象的基本特征,1.封装:将数据成员(Data Member)和属于此数据的操作方法(Operating Method),放在同一个实体(Entity)或对象中。

6、2.继承:父类定义(Define)一些通用的属性与行为,其子类继续使用。3.多态:在同一个类中可有许多同名的方法,但其参数数量与数据类型不同,而且操作过程与返回值也可能会不同。,(1)模块化(2)信息隐藏,(1)实现代码复用(2)简化设计过程,解决其他语言中不能重名的问题,15,类继承的实现,被继承的类称为父类继承父类的类称为子类执行继承时,子类将获得父类的属性,并具有自身特有的属性。,工人类,继承了父类的姓名和性别属性外还包含类别和是否有服装津贴属性,主任类,还包含级别和是否配备交通工具属性,职员类,具有姓名和性别两个属性,16,类继承的实现,extends关键字用于继承类。声明一个继承父类

7、的类的通常形式如下:class subclass-name extends superclass-name/类体 没有extends,默认父类为Object只能有一个父类,即单继承子类继承父类的全部成员,注意,17,3.2.1 类的定义,类的定义格式为:,类修饰符class name extends父类名implements 接口 type variable1;type variableN;type methodname1(parameter-list)/方法体 type methodnameN(parameter-list)/方法体,成员方法(对象行为或操作),成员变量(对象属性),18,类

8、的定义 举例,class Animal int weight;String colour;public void eat()System.out.println(Eating);public void move()System.out.println(Moving);,Animal的属性,Animal的方法,class Animal int weight;String colour;public void eat()System.out.println(Eating);public void move()System.out.println(Moving);,19,3.2.2 构造方法,构造函

9、数名称与类名称相同构造函数没有返回类型其任务是在创建对象时初始化其内部状态若无定义系统默认有一个无参构造方法,20,3.2.2 构造方法,class Pointint x,y;Point()/不带参数的构造函数 x=0;y=0;Point(int ix,int iy)/带参数的构造函数 x=ix;y=iy;void move(int newX,int newY)x=newX;y=newY;,构造函数没有返回类型,构造函数名称与类名称相同,21,3.2.3 对象的生命周期,对象的声明和创建 类名 对象名;/声明 对象名=new 类名(参数);/创建(2)对象的使用 对象名.成员变量名;对象名.成

10、员方法名(参数列表);(3)对象的销毁自动垃圾回收机制周期性的释放无用的对象。,22,(1)对象的声明和创建,例如:我们用Point p=new Point();生成了类Point的对象p后,可以用 p.x,p.y来 访 问该点的x、y坐标,如:p.x=10;p.y=20;/定义点(10,20)或者用new生成对象的引用,然后直接访问,如:px=new point().x;/px的值为0虽然我们可以直接访问对象的变量 p.x、p.y来改变点p的坐标,但是通过方法调用 的方式来实现能更好地体现面向对象的特点,建议在可能的情况下尽可能使用方法调用。,23,(2)对象的使用,要调用对象的某个方法,其

11、格式为:objectName.methodName(paramlist);例如我们要移动类 Point的对象 p,可以用:p.move(30,20);同样,也可以用new生成对象的引用,然后直接调用它的方法,如:new point().move(30,20);,24,(2)对象的使用 例 3-3,先定义一个类 Point,它在例3-2的定义中添加了一些内容。class Pointint x,y;String name=a point;Point()x=0;y=0;Point(int ix,int iy,String iname)x=ix;y=iy;name=iname;int getX()re

12、turn x;int getY()return y;void move(int newX,int newY)x=newX;y=newY;void print()System.out.println(name+:x=+x+y=+y);,25,(2)对象的使用 例 3-3,public class UsingObjectpublic static void main(String args)Point p=new Point();System.out.println(*before moving*);p.print();/call method of an objectp.move(60,60);

13、name=a new pointSystem.out.println(*after moving*);p.print();/call method of an object again!,26,(3)对象的销毁,有些面向对象语言保持对所有对象的跟踪,所以需要在对象不再使用的时候将它们从内存中清除。JAVA当对象不再被使用的时候将其清除,这就是所谓的“垃圾收集”。JAVA的垃圾收集器:它周期性地自动将不再被引用的对象从内存中清除。,27,3.3成员变量和成员方法,在类的定义中,成员变量和成员方法前面带有static的为类属性和类方法;不带static的为实例属性和实例方法。3.3.1类属性和类方

14、法3.3.2实例属性和实例方法,28,3.3.1类属性和类方法,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);,成员属性成员方法,29,3.3.1类属性和类方法,public

15、 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,30,3

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

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

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

19、void move()System.out.println(Flying);,36,class 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()来定义实例吗,37,3.5接口,3.5

20、.1 接口的定义3.5.2 接口的使用,java中,类的定义并不支持多重继承,但它通过接口机制可以实现多重继承的功能。一个类可以实现多个接口,使得接口提供了比多重继承更简单但更强大的功能。,38,3.5.1 接口的定义,接口只包含常量和方法的定义,没有变量和方法的实现。接口的定义包括接口声明和接口体两部分,最简单的接口定义格式如下:interface interfaceName/接口申明 interface Body/接口体,39,接口声明,完整的接口声明:publicinterface interfaceNameextends superInterfacepublic表明任意类都可以使用该接

21、口,如果没有public限定词修饰,就只有与该接口定义在同一个包中的类才可以访问该接口。extends子句表示该接口有父接口,与类extends子句不同的是,一个类只能有一个父类,而一个接口可以有多个父接口,父接口之间用逗号隔开。,对接口的访问权限,父接口列表,40,接口体由常量定义和方法定义组成,常量定义:Type NAME=value;在接口中定义的常量可以被多个类共享,具有public、final和static的属性,也就是任意类可以访问该常量,final表示这是一个常量。方法定义:Type methodName(paramlist);在接口中,只对方法进行声明,不提供方法的实现,41,

22、3.5.1 接口的定义,修饰符 interface 接口名称 public static final 变量名初值;/静态常量 public abstract native返回值 方法名(参数表)throws 异常列表/方法由于接口中定义的方法都是抽象、公有的,常量都是静态、公有的,所以修饰符可以省略。,说明:(1)通常接口的名字以able或ible结尾;(2)可以使用extends来继承接口的常量和抽象方法,但它与类中的extends不同,它可以有多个父接口,各父接口间用逗号隔开;(3)接口中的所有常量必须是public static final,方法 必须是public abstract,这

23、是系统默认的,不管你在定义 接口时,写不写修饰符都是一样的。,42,3.5.2 接口的实现,在类的声明中使用implements关键字来实现接口,一个类可以同时实现多个接口,各接口间用“,”隔开。class classname implements interfacename/重写接口中的方法;,说明:(1)若实现接口的类不是抽象类,则必须实现所有接口的所有方法,即为所有的抽象方法定义方法体。(2)一个类在实现某接口抽象方法时,必须使用完全相同的方法名,参数列表。(3)接口的抽象方法的访问控制符已指定为public,所以类在实现时,必须显示的使用public修饰符,否则被警告缩小了接口中定义的

24、方法的访问控制范围。,43,实例:接口的定义和实现,interface A double g=9.8;void show();class B implements A public void show()System.out.println(“g=“+g);,class InterfaceTest public static void main(String args)B b=new B();b.show();,44,3.5.4 接口的多态,Car.java/定义汽车类 public class Car public void move()System.out.println(running)

25、;Plane.java/定义飞机类public class Plane public void move()System.out.println(flying);Weapon.java/定义武器接口public interface Weapon public void shoot();,45,3.5.4 接口的多态,Fighter.java/定义战斗机类public class Fighter extends Plane implements Weapon public void shoot()System.out.println(发射飞弹);Tank.java/定义坦克类 public cl

26、ass Tank extends Car implements Weapon public void shoot()System.out.println(发射大炮);,I_ftest.java/定义主程序类public class I_ftestpublic static void main(String argv)Tank tank=new Tank();Fighter fighter=new Fighter();tank.move();tank.shoot();fighter.move();fighter.shoot();,46,3.6.1 包的创建,(1)缺省情况下为无名包(2)有名包的

27、创建:使用package语句如:package pname或 package dir1.dir2.pname 包就是一个文件夹,里面存放.class文件,包中的“.”号表示子文件夹。,47,3.6.2 包的引用,(1)使用包名、类名前缀例如:mypack1.mypack2.Myclass(2)加载引用:使用import语句格式:import mypack1.mypack2.Myclass或 import mypack.mypack2.*(3)直接引用:在同一文件夹下,48,3.6.3 设置CLASSPATH环境变量,CLASSPATH变量指明“.class”文件存放的位置。编译时:javac

28、d CLASSPATH路径 Myclass.java例如:javac d d:java myclass.java 则直接在d:java下创建在myclass.java指明的包目录,并把Myclass.class拷到该目录下。,49,3.7 类和类成员的访问权限,所有类A,所有子类C,包中类B 包中子 类E,本类D,类成员(类的变量、方法)的三种可访问性,50,3.7 类和类成员的访问权限,类的访问权限,缺省:同一包内的其他代码可访问,公共:任何包的代码可访问,51,总结,1.掌握面向对象程序设计的基本概念,对象、类、面向对象的基本特征(封装、继承和多态)。2.掌握类、对象、继承、抽象类、接口和包的定义与使用。3.掌握各种修饰符的使用方法。4.掌握定义类时的各种细节,构造方法的定义和使用,方法的重载,方法的重写。,

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号