chap4 抽象、封装与类

上传人:gp****x 文档编号:243073741 上传时间:2024-09-15 格式:PPT 页数:38 大小:83.50KB
返回 下载 相关 举报
chap4 抽象、封装与类_第1页
第1页 / 共38页
chap4 抽象、封装与类_第2页
第2页 / 共38页
chap4 抽象、封装与类_第3页
第3页 / 共38页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,Chap4,抽象、封装与类,类的定义和对象的使用以及面向对象程序设计的基本技术与方法,1,主要内容,抽象与封装,Java,的类,类的修饰符(非访问控制符),域(静态属性,变量),方法(动态属性),访问控制符,类的设计,2,4.1,抽象与封装,抽象,去除掉被研究对象中与主旨无关的次要部分,仅仅抽取与研究有关的实质性内容加以考虑。在软件开发过程中使用的抽象有两类:过程抽象和数据抽象,过程抽象,:,将系统划分为若干部分,强调过程和步骤,数据抽象,:系统中的数据和数据上的操作结合在一起,把他们抽象为抽象数据类型,类,3,封装,利用抽象数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型内部,系统的其他部分通过包裹在数据外面的操作与数据进行交互。,在面向对象程序设计中,这个抽象数据类型被称作,”,类,”,安全性和可复用性提高,4,Java,的类,系统定义的类,java,类库中的类,用户自定义的类,Java,类库由开发人员或软件供应商编写,是,java,语言的重要组成部分,实现了程序运行基本的功能,能否掌握和运用好类库决定了编程能力的高低。,Java,基本语法规则和类库的学习,5,常用的包,根据功能不同,,java,类库被划分为若干不同的包。,Java,的类库在不断扩展,功能也越来越完善。,S,可以找到类库联机手册,Java.lang,包 核心类库 包含程序运行必不可少的系统类。基本数据类型,基本数学函数,字符串处理,线程和异常处理等。默认加载,Java.io,包 基本输入输出类库,6,java.util,包含一些低级的实用工具,如,Date,类,,Vector,类等。,java.util.zip,实现文件压缩功能。,java.awt,包 构建图形用户界面的类库,绘图和组件以及事件响应等。,java.math,整数算术运算及十进制算术运算,java.text,处理文本或日期格式,java.applet,实现运行于,Internet,浏览器的工具类库,,java.applet.Applet,java.awt.event,包是,java.awt,包中,Event,类的扩充,7,实现网络功能的类库,java.sql,实现数据库链接的类库,可以使,java,程序访问不同类型的数据库。,java.rmi java.rmi.registry java.rmi.server,实现,RMI,功能(远程方法调用),java.secuirty,等提供了安全性控制和管理。,javax,是,java,的扩展包,涉及图形,多媒体和事务处理等方面的类库,8,使用系统类的方法,继承系统类,class myapplet extends Applet,创建系统类的对象,Label l1=new Label(“”),;,直接使用系统类,System.out.println,(),系统类应该是用户程序可见的,因此要引入类库 。,import java.awt.*;,import,的作用是编译时将系统类的字节码加入到用户的,java,程序中。,9,用户自定义类,根据特定问题,用户自己编写的类。,class student,String sname;,int snum;,teacher tt;,public String getSname() return sname;,public void setSname(String sname)this.sname = sname;,public teacher getTt() return tt;,public void setTt(teacher tt) this.tt = tt;,public void evaluatt(float ff ) this.tt.tff =ff; ,10,创建对象与定义构造函数,创建对象,格式:类名 新建对象名,=new,构造函数(),类名 新建对象名,=new,类名(),e.g,Student sd1=new Student();,TextField input=new TextField(6);,new,为新建对象开辟内存空间的算符。,构造函数初始化对象,11,变量和对象的区别,声明格式,int i=10 Integer i=new Interger(10),10,10,方法,parseInt,方法,n,变量占内存小 对象占内存大,只有一个数值 除了数值还有方法,引用,i,对象名,.,属性名,要访问或调用一个对象的域或者方法,首先访问对象,然后用算符“,.,”链接这个对象的某个域或方法。例如:,i.parseInt(s) i.value,3,号楼,303,12,构造函数 作用是对对象进行初始化的工作,对象中含有多个域(变量),需要若干赋值语句,将这些赋值语句组合成一个特殊的方法,这个特殊方法就是构造函数,特殊性:,方法名与类名相同,没有返回类型 也没有返回值,主要是初始化工作,也可以做其他操作,一般不能由编程人员显示调用,在创建对象时,系统自动调用,13,如果在类中不定义构造函数,系统会默认这个类的一个空构造函数,没有参数,也没有任何具体语句。,可以构造一个或几个构造函数。,如:,Student,(,String sname,),Student,(,String sname,,,int snum,),看例子,PhoneCard,类 和,Car,类,14,类的修饰符,class,类名,访问控制修饰符:限定类或者其属性是否可以被其他部分访问和调用。,非访问控制修饰符,abstract final,被,abstract,修饰的类称为抽象类,被,final,修饰的类称为最终类,15,抽象类,形式 如:,abstract class bird,是没有具体对象的概念类,.,如:鸟,电话卡,要想使用抽象类必须为它创建子类。,抽象类是它的所有子类的公共属性的集合,所以使用抽象类的优点是可以充分利用这些公共属性来提高开发和维护程序的效率。,16,abstract class PhoneCard,double balance;,void performDial(),.,如果所有电话卡类的,performDial(),的返回值要改为,boolean,,不用修改所有的子类,只要在父类中作修改即可。或者增加一个方法,abstract class PhoneCard,double balance;,boolean performDial(),void performDial(),17,最终类,一个类如果被,final,所修饰,说明它不能再有子类了。,被定义为,final,的类通常是一些有固定作用,用来完成某种标准功能的类。比如引用数据类型,实现网络功能的类等等。,电话卡类,无卡号类,有卡号类,磁卡,IC,卡,校园,201,卡,200,卡,IP,卡,public final IcCard,18,注意:,abstract和final修饰符不能同时修饰一个类。因为abstract类自身没有对象,必须派生子类;而final类不可能有子类。,abstract和final可以分别和其他修饰符组合。如:public abstract 或public final,19,域,定义一个类时,需要定义一组称为域的变量保存类或对象的数据。,无特殊说明(无static修饰)的域称为实例变量,在类定义的时候被声明,在创建对象时才分配空间,并保存一个对象的数据,实例变量的声明周期与对象存在的时间相同。,域的类型可以是简单数据类型也可以是数组,向量,类或接口。,在一个类中,域名应是唯一的(类中不能重名),20,域的修饰符,域的修饰符有,static,,,final,,,volatile,static,修饰的域称为静态域,final,修饰的域称为最终域,volatile,修饰的域称为易失域,21,静态域,用,static,修饰的域,静态域仅属于类的域,不属于任何一个类的对象,静态域不保存在某个对象的内存区域中,而只保存在类的内存区域中的公共存储单元,任何一个对象访问和修改的都是同一个内存单元的内容,objA,int b,class,myclass,static,int a,int,b,objB,int b,22,静态初始化器,是由关键字,static,引导的一对大括号括起来的语句组,作用是为了完成初始化工作,形式:,static ,语句组;,与构造函数的区别,构造函数是初始化对象,静态初始化器是对类自身进行初始化,构造函数是在用,new,运算符产生新对象时由系统自动执行,而静态初始化器是在它所属的类加载入内存时由系统调用执行,静态初始化器不是方法,没有方法名,返回值和参数列表,23,最终域 用,final,修饰的域,用,final,修饰的常量在整个程序的执行过程中不会改变,需要说明常量的数据类型,同时需要指出常量的具体取值,因为所有类对象的常量成员,其数值都是固定一致的,为节省空间,常量通常声明,static,如:,static final String connectNumber=“200”,易失域 用,volatile,修饰的域,易失域可能同时被几个线程所控制和修改,使用时要特别注意,24,方法,方法是类的,动态属性,,标志了类所具有的功能和操作,用来把类和对象的数据封装在一起,方法的修饰符分为,abstract,final,static,native,synchornized,abstract,修饰的方法,抽象方法,是一种只有方法头没有方法体的方法,没有任何具体操作,abstract void mymethod(,参数列表,),;,抽象方法必须存在于抽象类之中,一个非抽象类中出现抽象方法是非法的,,即一个抽象类的子类如果不是抽象类,则它必须为父类中的所与抽象方法书写方法体,抽象类中不一定只能拥有抽象方法,25,静态方法是属于整个类的类方法,声明一个方法为,static,至少有三重含义,调用此方法时必须使用类名做前缀,而不是对象名,非,static,方法是属于某个对象的方法,在对象创建时对象的方法在内存中拥有自己专用的代码,,而,static,的方法是属于整个类的,,它在内存中的代码段将随着类的定义而分配和装载,,不被任何一个对象专有(,类似于静态域,),由于,static,方法属于整个类的,所以它不能操纵和处理属于某个对象的成员变量,而只能处理属于整个类的成员变量,即 ,,static,方法只能处理,static,域,static,修饰的方法,静态方法,26,final,修饰的方法,最终方法,是功能和内部语句不能被更改的最终方法,,即,不能被当前类的子类重新定义的方法,所有已被,private,修饰符限定为私有的方法,以及包含在,final,类中的方法,都被缺省地认为是,final,的,27,native,修饰的方法,本地方法,一般用来声明其他语言书写方法体并具体实现方法的特殊方法,,c,、,c+,、汇编等,所有的,native,方法都没有方法体,而用分号代替,充分利用已有模块及提高运行的效率,影响软件的跨平台特性,synchronized,修饰的方法,同步方法,用来修饰,static,方法(类的方法),被调用执行时,将把系统类,Class,中对应,当前类的对象加锁,用来修饰非,static,方法(对象的方法),方法在被调用执行前,将把,当前对象加锁,28,访问控制修饰符,访问控制符是一组限定类、域或方法是否可以被程序里的其他部分访问和调用的修饰符,其他部分程序是指本类以外的其他的类,类的访问控制符只有一个,public,和缺省,域和方法的访问控制符有:,public,、,private,、,protected,和缺省访问控制符,29,类的访问控制修饰符,public,公共类 表明它可以被所有的其他类所访问引用,程序的其他部分可以创建这个类的对象、访问这个类内部可见的成员变量和调用它的可见方法,同一包中的类可以不用任何说明相互访问和引用,而对于不同包中的类是互不可见的,不能直接引用,要用,import,语句加载包,,import,packgename.clsname,;,一个类作为整体对程序的其他部分可见,并不代表类的所有域和方法也同时对程序的其他部分也可见,前者只是后者的必要条件,类的域或方法是否为所有其他类所访问,还要看这些域或方法自己的访问控制符。,30,第一个包,类:,myclass,student,第二个包,类,PhoneCard,testcard,public class myclass ,class student,public class PhoneCard,class testcard,31,每个,java,程序的只能有一个,public,类,他一般情况也是主类,缺省访问控制符 假如一个类没有访问控制符,说明它具有缺省的访问控制符。,规定这个类只能被同一个包中的类访问和引用,而不可以被其他包中的类使用,这种访问特性又称为包访问性,一个类作为整体对程序的其他部分可见,并不能代表类内部的所有域和方法也同时对程序其他部分可见。前者只是后者的必要条件,类的域和方法能否为其他类所访问,还要看域和方法自己的访问控制符,32,类成员,(,域和方法,),的访问控制符,被设定为,public,的成员可以被所有类访问,保护访问控制符,protected,修饰的方法,可以被三种类所引用:,该类自身,、,同包中的其他类,、,其他包中的该类的子类,缺省访问控制符的方法,也具有包访问性,可以被,同一个包中的其他类,所访问和调用,private,修饰符修饰的方法只能被该类自身所访问和修改,而不能被任何其他类(,包括该类的子类,)来获取和引用,33,域被限定为,public,会造成安全性和数据封装性下降,所以一般应减少,public,域的使用。而私有域,(private),,,只能被该类自身,所访问和引用,是类的私有成员,提供了最高的保护级别。当希望获取或修改私有域时,需要借助类的方法来实现。,34,访问控制符,类,域与方法,public,缺省,public,所有类,同包类,protected,本类 同包类 本类的子类,同包类,缺省,同包类,同包类,private,本类,本类,35,abstract 不能与final并列修饰一个类,abstract不能与private static final或native并列修饰一个方法,abstract类中不能有private的成员,abstract方法必须在abstract类中,static方法中不能处理非static属性,36,类的设计,例4-10 一个不好的类设计,数据没有很好地封装,类缺少了应有的操作,例4-11改进后的类设计,抽象出更多的静态属性,数据的封装性好,方法更符合类应有的功能。,37,上机实践任务,继续完成上次的任务。,验证非访问控制修饰符和访问控制修饰符的应用,设计一个手机类,(phone),描述手机品牌,型号,颜色和号码,设计构造函数初始化对象的所有静态属性。设计该类的方法实现输出手机静态属性值的功能。,38,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!