收藏 分享(赏)

java类和对象.ppt

上传人:无敌 文档编号:974533 上传时间:2018-05-11 格式:PPT 页数:86 大小:352KB
下载 相关 举报
java类和对象.ppt_第1页
第1页 / 共86页
java类和对象.ppt_第2页
第2页 / 共86页
java类和对象.ppt_第3页
第3页 / 共86页
java类和对象.ppt_第4页
第4页 / 共86页
java类和对象.ppt_第5页
第5页 / 共86页
点击查看更多>>
资源描述

1、Java与面向对象技术,面向对象的概念 简单地说 面向对象编程(Object Oriented Programming)简称OOP 就是使我们分析、设计和实现一个系统的方法尽可能地接近我们认识一个系统的方法。 描述对象之间的相互作用,面向对象的方法包括: 面向对象的分析(OOA, Object-Oriented Analysis) 面向对象的设计(OOD, Object-Oriented Design) 面向对象的程序设计(OOP, Object-Oriented Program)面向对象技术主要围绕以下几个概念: 对象、抽象数据类型、类、类型层次(子类)、继承性、多态性。,面向对象的概念,面

2、向对象的概念,面向对象编程和面向过程编程的区别 过程化设计先确定算法,再确定数据结构;面向对象编程先确定数据结构,再确定算法 面向过程的程序员习惯于建立数据结构存放数据并定义方法(函数)来操作数据; 而面向对象程序员则构造对象模型,将数据与方法组织在一起。,面向对象程序设计方法(OOP)面向对象程序设计方法的优点可重用性可扩展性可管理性面向对象程序设计语言,OOP的四个基本机制抽象封装继承与派生多态性。,OOP的抽象,含义:对具体问题(对象)进行概括,抽出这一类对象的公共性质并加以描述的过程。要求:先注意问题的本质及描述,其次是实现过程或细节。所涉及到的主要内容:数据抽象-描述某类对象的属性或

3、状态(对象相互区别的物理量);代码抽象-描述某类对象的共有的行为特征或具有的功能。 如何实现抽象:对问题进行分析,提取其属性和行为 。,OOP抽象的编程要点,抽象是有选择性的忽略决定什么是重要的,什么不是聚焦并依赖于那些重要的忽略那些不重要的,Java中的对象,含义:它是具有该类类型的一个特定的个体,是类的一个变量。,对象,实体,类,抽象数据类,实例化,抽象,映射,计算机世界,现实世界,抽象,计算机逻辑的实现,举例说明:对客观世界进行抽象自行车:数据(属性或者状态)车架尺寸车轮尺寸牌子材料名称 操作(方法或者功能)变速移动修理,Windows窗口数据(属性):颜色样式标题位置操作(方法):打开

4、窗口改变大小移动位置,OOP的封装,含义:提供将所抽象出的问题的属性(数据成员)和行为(代码成员)相组合的一种机制,它能将这二类成员再组合在一起,形成对象或实体。目的:增强使用的安全性,使用者不必了解具体的实现细节,而只需要通过设计者提供的外部接口来操作它。优点:实现高度模块化,从而产生出软件构件(控件);利用控件快速地组装程序。客户可以调用一个并不了解内部机制的对象的方法任何关于内部的改动对客户来说都是隐藏的,封装把对象的所有组成部分组合在一起,封装定义程序如何引用对象的数据,封装实际上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。,OOP的封装,OOP的封装,封装的基本要

5、求:有一个特定的边界:所有的内部变化都限制在此边界内(类定义的 );有外部接口:此对象利用它与其它对象发生关联(public成员);有特定的访问权限:在对象外部不能访问或修改受保护的内部实现细节(private成员),面向对象基本概念,面向对象的程序设计(OOP)已成为现代软件开发的必然选择。通过掌握面向对象的技术,能开发出复杂、高级的系统,这些系统是完整健全的,但又是可扩充的。OOP是建立在把对象作为基本实体看待的面向对象的模型上的,这种模型可以使对象之间能相互交互作用。 面向对象程序设计在一个好的面向对象程序设计语言(OOPL)的支持下能得到最好的实现。Java就是一种优秀的OOPL,它提

6、供了用来支持面向对象程序设计模型所需的一切条件。Java有自己完善的对象模型,并提供了一个庞大的Java类库,并有一套完整的面向对象解决方案和体系结构。,面向对象技术,正是利用对现实世界中对象的抽象和对象之间相互关联和相互作用的描述来对现实世界进行模拟,并且使其映射到目标系统中。所以面向对象的特点主要概括为抽象性、继承性、封装性和多态性。抽象性指对现实世界中某一类实体或事件进行抽象,从中提取共同信息,找出共同规律,反过来又把它们集中在一个集合中,定义为所设计目标系统中的对象。继承性新的对象类由继承原有对象类的某些特性或全部特性而产生出来,原有对象类称为基类(或超类、父类),新的对象类称为派生类

7、(或子类),派生类可以直接继承基类的共性,又允许派生类发展自己的个性。继承性简化了对新的对象类的设计。封装性是指对象的使用者通过预先定义的接口关联到某一对象的服务和数据时,无需知道这些服务是如何实现的。即用户使用对象时无需知道对象内部的运行细节。这样,以前所开发的系统中已使用的对象能够在新系统中重新采用,减少了新系统中分析、设计和编程的工作量。多态性是指不同类型的对象可以对相同的激励做出适当的不同相应的能力。多态性丰富了对象的内容,扩大了对象的适应性,改变了对象单一继承的关系。,面向对象程序的特点,面向对象基本概念封装、继承和多态,封装:隐藏实现细节继承:实现软件可重用的重要方式多态:重载(o

8、verload)和覆盖(override),对象有两个层次的概念: 现实生活中对象指的是客观世界的实体; 程序中对象就是一组变量和相关方法的集合,其中变量表明对象的状态,方法表明对象所具有的行为。,面向对象的概念对象,对象 对象的状态 对象的行为 我们可以把现实世界的事物抽象成对象 对象有两个特征:状态(state)和行为(behavier) 软件的对象概念是由现实世界对象抽象而来的;把现实世界对象的状态保存在软件对象的变量中;把现实世界对象的行为通过软件对象的方法来实现 比如我们人这个类本身 我们可以写一个类 见Classtest类,面向对象的概念对象,可以将现实生活中的对象经过抽象,映射为

9、程序中的对象。对象在程序中是通过一种抽象数据类型来描述的,这种抽象数据类型称为类(Class)。,面向对象的概念对象,类是描述对象的“基本原型”,它定义一类对象所能拥有的数据和能完成的操作。在面向对象的程序设计中,类是程序的基本单元。 相似的对象可以归并到同一个类中去,就像传统语言中的变量与类型关系一样。 程序中的对象是类的一个实例,是一个软件单元,它由一组结构化的数据和在其上的一组操作构成。,面向对象的概念类,面向对象的概念类,从程序设计的角度看,类是面向对象程序中最基本的程序单元,类实质上定义的是一种数据类型,这种数据类型就是对象类型,我们可以使用类名称来声明对象变量声明对象变量之后,还不

10、能使用对象,必须用运算符new创建对象实体之后,才能使用对象,为什么要使用类?采用简单数据类型表示现实世界中概念的存在很大的局限性。例如:采用int型数据表示一个日期概念,需要使用3个变量:int day, month, year;如果要表示2个人的生日,就要使用6个变量并且在使用中必须时刻注意三者的联系和约束关系同时在使用日期概念时要同时对三个变量进行访问使用类可以把现实问题中的对象映射为程序中的一个整体类。,面向对象的概念类,类中不但有变量,还有与之相关的操作所定义的方法。将变量和方法封装在一个类中,可以对成员变量进行隐藏,外部对类成员的访问都通过方法进行,能够保护类成员不被非法修改。,c

11、lass BirthDate public int day,month,year; public int tomorrow() BirthDate mybirth, yourbirth;,BirthDate date;已知当前日期对象,求第2天的日期对象:date.day =date.day+1;如果date.day已经为31,操作结果是非法状态。可以定义一个成员方法tomorrow(),求第2天的日期对象。外部要获得当前日期的后一天时,只要调用:date.tomorrow();,面向对象的概念类,定义类,类声明: class extends implements 变量声明; 构造方法; 方法

12、声明与实现; ,定义类,声明成员变量: 数据类型 声明成员方法: (参数列表) throws 声明main方法 public static void main(String args),定义类注意!,类的成员变量在类的主体中,且不在方法体中声明。类的成员方法中可以声明变量,称为局部变量。局部变量的作用域在方法内部,可与成员变量同名。如果类的成员方法有返回值,方法中必须以return语句返回,程序执行到return就返回而忽略其后所有语句;否则,return可省略返回类型可以是任意的Java数据类型,当一个方法不需要返回值时,返回类型为void,类和对象实例,类与对象定义类使用对象成员变量和局部

13、变量的初始化成员变量和局部变量同名的情况,定义People类,使用对象,声明对象(的引用变量): 类名 变量名;对象的实例化: new ()将引用指向实例: 格式:变量名=new ()引用对象的成员变量和调用对象方法对象.成员变量对象.成员方法(参数列表),(1)对象的生成 通过new操作符生成一个对象;例如:People p1;p1=new People();(2)对象的构造过程 为对象开辟空间; 调用构造方法; 返回对象的引用。,使用对象,使用对象对象的引用模型,类是对象的模板,同一个类可以创建多个对象,每个对象有各自的内存空间,不会互相影响。,栈内存,对age的访问,堆内存,p1.get

14、Age(),-30,age,P1标识的对象,对age的访问,p2.getAge(),0,age,P2标识的对象,类和对象实例,关于方法的参数传递当参数分别是对象的引用、字符串和数组的引用时的情况,使用People类,构造方法和析构方法方法的重载this引用和instanceof对象运算符类及其成员的访问权限实例成员与类成员,构造方法与析构方法,构造方法是一类特殊的成员方法,用于创建类的实例并初始化对象。声明构造方法构造方法与类同名,且没有返回值类型。注意:Java为每个类提供一个默认的无参的构造方法,但当自行声明了构造方法后,这个默认的无参构造方法不再提供构造方法无返回值类型,有返回值(即使是

15、void)的成员方法不是构造方法构造方法可以重载,构造方法与析构方法,析构方法声明为: protected void finalize()一个类只有一个finalize方法,不能重载,没有返回值。Java程序中的对象有垃圾回收器(garbage collector)自动释放,因此实际上finalize并不做释放资源的工作,通常被省略。,构造方法与析构方法,关于构造方法和析构方法构造方法的作用默认构造方法析构方法Construct1.java,Java中变量的缺省初值都是确定的:布尔变量的初值为:false整数变量的初值为:0浮点数变量的初值为:0.0引用(复合)变量的初值为:null在方法实现

16、中定义的变量必须显式的初始化。变量的作用域 指可访问变量的一段代码,在程序中不同的地方声明的变量具有不同的作用域:局部变量、类变量、方法参数、例外处理参数。在一定的作用域内,变量名必须唯一。,方法的重载,方法的重载带有不同参数列表的同名方法重载的条件方法名相同参数列表必须不同,即以不同的参数个数、类型、次序来区别重载方法返回值不能区别重载的方法,方法的重载,拷贝构造方法由同一个类的已知对象创建新对象的构造方法能够实现对象的复制,方法的重载,关于方法的重载构造方法的重载拷贝构造方法,this引用和instanceof对象运算符,this 指代调用本方法的当前对象本身。this三种用法指代对象本身

17、访问当前对象的成员调用本类的其他重载的构造方法,this用法,public class Thistest3 private int i = 0; Thistest3 increment()i+;return this;void print()System.out.println(i = + i);public static void main(String args)Thistest3 x = new Thistest3();x.increment().increment().increment().print();/this.print();/类方法中不能使用this,this引用和inst

18、anceof对象运算符,Instanceof运算符判断一个对象是否是指定类或其子类的实例,类及其成员的访问权限,对类成员的访问权限类成员的访问权限按照级别从高到低依次是:共有(public)、受保护(protected)、友好(不用任何修饰符)和私有(private)注意:访问权限修饰符只适用于类的成员,不能修饰方法中的局部变量!,类及其成员的访问权限,类成员访问权限的说明,类及其成员的访问权限,类及其成员的访问权限,class Testpublic int pub;protected int pro;int fri;private int pri;public Test()pub=0;pro

19、=0;fri=0;pri=0;,类及其成员的访问权限,类的访问权限通常情况下,类的访问权限只有两种:public 和缺省的。只有内部类可以有proteced和private的访问权限。public修饰的类可以用于在任何地方创建对象;而缺省的只能在本包中创建对象,实例成员与类成员,类中的成员分为:实例成员和类成员类成员由static关键字修饰,可以在未创建类的对象前就用类名直接调用类成员。使用static声明类成员的原因Static1.java,实例成员与类成员,实例成员变量和类成员变量存储结构的差别实例变量每次创建对象时才被分配空间类变量当类被加载时就分配空间访问方式的差别实例变量必须通过对象

20、访问类变量不需要,实例成员与类成员,实例成员方法和类成员方法类方法在类被加载时就分配入口地址实例方法在创建第一个对象时分配入口地址,这个地址被所有对象共享类方法和实例方法中的局部变量当方法被调用时才分配空间类方法只能访问类方法和类变量实例方法能访问类方法、类变量、实例方法、实例变量类方法中不能使用this、super等关键字,实例成员与类成员,类变量,实例变量,类方法,实例方法,类加载时分配,每次对象创建时分配,创建第一个对象时分配,实例成员与类成员,类成员和实例成员的创建时机及其调用关系Static2.java,static 和静态代码块,一个类中可以使用不包含在任何方法体中的静态代码块(s

21、tatic block)当类被载入时,静态代码块被执行;静态代码块只执行一次;静态代码块经常用来进行类属性的初始化static/成员属性初始化代码,类的继承性,什么是继承定义继承的类super引用final关键字初始化及class装载,什么是继承,面向对象中的两个重要概念:抽象和分类。抽象和分类是人们认识世界的基本方法:抽象是将现实世界中客观存在的事务映射到意识中的一种方法。分类是指确定这些抽象到意识中的概念之间的关系。这些关系的基本形式包括一般到特殊和整体与局部。,什么是继承,在面向对象中,一般到特殊的关系用继承(Inheritance)表示;整体与局部的关系用组合(composition)

22、表示。,单继承,多继承,什么是继承,组合,什么是继承,继承的概念继承是由已有的类创建新类的机制。由继承得到的类称为子类,被继承的类称为父类(超类)(基类)继承的作用实现软件可重用的重要方式增强软件可扩充性提高软件的可维护性,什么是继承,继承的原则子类继承父类的成员变量和成员方法子类不继承父类的构造方法,能够继承父类的析构方法子类不能删除父类的成员,但可以重定义父类成员子类可以增加自己的成员,定义继承的类,声明子类 classextends Object类Java语言中所有的类都是Object的直接或间接子类,定义继承的类,子类对象对父类成员的访问权限子类对父类的私有成员(private)没有访

23、问权限子类对父类的公有成员(public)和保护成员(protected)具有访问权限子类对父类中缺省权限成员的访问分两种情况,对同一包中父类的缺省权限成员具有访问权限,而对不同包中父类的缺省权限成员则没有访问权限。,名称隐藏(Name hiding),Java中子类中可定义与父类成员同名的成员子类隐藏父类的成员变量:在子类中直接访问父类的成员变量,通过super访问父类的同名成员变量子类覆盖(override)父类的成员方法子类重载(overload)父类的成员方法,向上转型(Upcasting),子类和父类具有is a的关系,例如对于父类“人”和子类“学生”,我们可以说“学生”是“人”因此

24、,可以使用父类的引用指代子类的实例,这种情况被称为Upcasting。上转型对象可以访问子类继承或覆盖的成员;不能访问子类中新增的成员上转型对象可以被重新赋值为子类实例,这时它又重新可以访问子类中新增成员,向上转型(Upcasting),上转型对象Upcasting.java,super引用,super用来引用当前对象的父类,用super可以实现对父类成员的访问。访问父类被隐藏的成员变量,如: super.variable; 调用父类中被覆盖的方法,如: super.Method(paramlist);调用父类的构造函数,如: super(paramlist);,super引用,关于类的继承及

25、super关键字People1.javaStudent1.java注意:若使用super引用父类构造方法,则super必须放在第一句,final关键字,final 修饰数据final 可以修饰数据,对于基本数据类型,表示它的值一旦定义不可修改;对于引用数据类型,表示引用不可指向其他对象,但指向的对象本身内容可以被修改关于final修饰数据FinalData.java,final关键字,final 修饰方法final 修饰的方法在子类中不可以被覆盖(override)final 修饰类final 修饰的类不能被继承,初始化及class装载,初始化及类装载的顺序是执行包含main方法的类,若发现该

26、类有超类,则优先装载超类(多层继承关系时依次向上查找装载)。装载类时,就执行其中的static部分(包括static变量和方法的初始化和static代码块,按照在类中定义的顺序)所有必要的类都装载完后,才可以创建对象。创建对象时:先为所有基本数据类型赋缺省值,所有引用数据类型赋为null;在调用构造方法,在本类构造方法中默认先调用父类构造方法(多层继承关系时依此类推),初始化及class装载,关于final修饰数据Cartoon.javaBeetle.java,类的多态性,什么是多态重载的条件和编译时多态性覆盖和运行时多态性,什么是多态,多态(polymorphism)即一个名字具有多种语义。

27、在面向对象中指一个方法可以有多种实现版本。类的多态表现为方法的多态,方法的多态主要有重载(overload)和覆盖(override)。重载是”同一个类”中,有多个方法同名,但是参数列表不同覆盖是子类中定义了父类同名方法,且参数列表和返回值类型相同,重载的条件和编译时多态性,同名方法构成重载的条件参数列表不同(包括参数的个数、类型、不同类型参数的顺序),方法的返回值不能构成重载的条件静态联编(静态多态性)它是Java的编译时特性。即在编译用户的程序代码时就将对某一方法的调用与对应的具体方法体相互联系起来,生成最终的程序代码同名的方法由于参数列表不同,在编译时就可以根据调用方法的形式确定到底执行

28、哪个方法的代码,因此这种方法的同名是允许的,覆盖和运行时多态性,同名方法构成覆盖的条件方法分别在父、子类中定义同名除访问控制修饰符外 其它通通一样运行时多态性它是Java的运行时的特性。即在编译用户的程序代码时不将对某一方法的调用与对应的具体方法体相互联系起来,而是在执行过程中依据对象的实际类型相应地生成对该对象所在类中的方法最终调用的程序代码,覆盖和运行时多态性,由于调用方法的引用可能指向父类或子类的对象(见上转型对象),因此可以根据“是谁的对象就调用谁的方法”的原则确定调用同名方法中的哪一个,因此在父、子类中定义同名、甚至参数列表相同的方法是允许的。当然,确定调用方法的引用指向父类还是子类

29、的对象在编译时无法完成,只能在运行时确定,重载和覆盖,从方法声明角度:重载的两个函数参数列表不同;覆盖的两个方法参数列表和返回值相同从所处位置角度:重载的两个方法在同一类中;覆盖的两个方法在有继承关系的两个类中从方法调用角度:重载的方法被同一对象使用不同的参数调用;覆盖的方法被不同对象使用相同参数调用从联编时机角度:重载的方法在编译时联编;覆盖的方法在运行时联编,重载和覆盖,关于方法的重载和覆盖重载时返回值、参数名称和访问权限不起作用覆盖时参数列表相同则返回值必须相同覆盖时子类中方法的访问权限不能低于父类中同名方法的访问权限Over.java,习题,习题1面向对象特性,按如下要求设计类定义一个

30、“曲调类”Note,包括value成员Note的三个子类分别表示高音、低音和中音定义一个“乐器类”Instrument,具有play()方法Instrument有子类“管乐器类”Wind和“敲击乐器类”Percussion在主类中,实现让Wind演奏高音和Percussion演奏中音,习题,习题2面向对象特性,按如下要求设计类在习题1的基础上,增加Instrument的子类“弦乐器类”Singed,增加Wind的子类“铜管类”Brass和“木管类”Woodwind在主类中实现铜管演奏中音、木管演奏低音、弦乐器演奏高音、敲击乐器演奏低音,习题,出现的问题有多个public类在构造方法中输出音调访

31、问权限的声明方法String valuenew String();如何声明类,没有类体?构造方法与类同名,声明为其他访问权限?,抽象类和最终类,声明抽象类与抽象方法public abstract class PlaneGraphics1/平面图形类,抽象类 public abstract double area(); /计算面积,抽象方法,分号“;”必不可少,使用abstract关键字,抽象方法只有方法声明,没有方法体,抽象类和最终类,规定:抽象类不能被实例化,只有它的非抽象子类可以创建对象抽象类中不一定包含抽象方法,但有抽象方法的类必定是抽象类抽象类中的抽象方法只是声明,不包含方法体,即不给

32、出方法的实现构造方法、类成员方法不能声明为抽象方法抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类,抽象类和最终类,抽象类的意义:描述抽象的概念,规定必须实现的方法的统一接口关于抽象类和抽象方法Abstracttest.java,抽象类和最终类,最终类和最终方法final关键字修饰的类称为最终类,最终类不能被继承final关键字修饰的方法称为最终方法,最终方法不能被覆盖最终方法和最终类没有必然的对应关系,递归方法,求n!Nmul.java无返回值的递归方法Count.java,本章小结,面向对象是人们认识现实世界的思想和方法在程序设计中的体现类就是根据这一思想,将数据和对数据的操作封装在一起,是面向对象程序设计的核心类是模板,而对象是这个模板的具体实现,本章小结,封装、继承和多态是面向对象的基本特征封装特性通过访问权限的设定将类的实现细节隐藏,提供接口供外部访问继承和组合是类间的基本关系,是软件复用的重要方法多态是面向对象的重要标志,没有动态链编,就是面向对象,

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

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报