欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    【精品】java 实用程序设计(西电版第3章 java面向对象的程序设计(可编辑.ppt

    • 资源ID:86272562       资源大小:2.15MB        全文页数:97页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    【精品】java 实用程序设计(西电版第3章 java面向对象的程序设计(可编辑.ppt

    Java 实用程序设计(西电版)第3章 Java面向对象的程序设计2 2第 3 章 Java 面向对象的程序设计3.1 面向对象的基本思想1.面向对象问题求解基本思想所有编程语言都提供“抽象”方法。也可以说,使用一种编程语言所能解决的问题的复杂程度直接取决于抽象的种类及质量,这里的抽象种类指的是被抽象的对象是什么。早期的汇编语言是对底层机器的轻微抽象。后续发展起来的许多命令式语言(如FORTRAN、BASIC和C语言等)对汇编语言进行进一步的抽象。3 3第 3 章 Java 面向对象的程序设计2.面向对象问题求解方法面向对象方法的特点就在于,在建立问题空间的问题模型和解空间的机器模型的过程中,都使用了“对象”这一概念,使得机器世界中的面向对象模型与现实世界中问题的存在形态非常接近,从而简化了两种模型之间的映射。4 4第 3 章 Java 面向对象的程序设计3.面向对象程序设计的特征Smalltalk语言的发明人Alan Kay曾经将面向对象程序设计方法的特征总结为以下5个方面:(1)一切皆对象。(2)程序是一系列对象的组合,对象间通过消息传递进行联系。(3)每个对象都有自身内存空间,内存空间由其他对象构成。(4)每个对象都有一种类型(type)。(5)同一类型的所有对象都能够接收相同的消息。5 5第 3 章 Java 面向对象的程序设计3.2 面向对象程序设计的基本概念1.对象、类与接口3.1节已经介绍了对象实际上是问题空间中可以明确标识的实体,例如学生、汽车、手机等,这些实体在解空间中存在相应的抽象表示。面向对象程序设计中的对象是以现实世界的对象为模型构造的。每个对象都有自己的标识、状态和行为。6 6第 3 章 Java 面向对象的程序设计7 7第 3 章 Java 面向对象的程序设计8 8第 3 章 Java 面向对象的程序设计3.继承与复用复用是现代程序设计语言都应实现的功能。对于命令式语言,如C语言,复用的对象处于代码和函数的层面,而对于Java语言,复用的对象主要是已定义的类。为了达到复用类的目的,使用的方法主要有组合和继承两种。9 9第 3 章 Java 面向对象的程序设计图3-1 类的继承示例10 10第 3 章 Java 面向对象的程序设计4.多态性1)编译时多态编译时多态通过方法重载(overloading)实现。方法重载是指在一个类中定义多个名称相同但参数不同的方法。参数不同指的是两方面的不同:参数类型不同或参数数量不同。(1)参数类型不同。以java.lang.Math类的max()方法为例,该方法包括如下版本:public static double Math.max(double a,double b);public static float Math.max(float a,float b);public static int Math.max(int a,int b);public static long Math.max(long a,long b);11 11第 3 章 Java 面向对象的程序设计(2)参数数量不同。以java.lang.String类的split()方法为例,该方法包括如下版本:public String split(String regex);public String split(String regex,int limit);在程序中具体使用其中的哪个方法,是由编译器根据参数数量和类型决定的。虽然多个重载方法的参数列表必须不同,但它们的返回值、修饰符可以相同也可以不同。12 12第 3 章 Java 面向对象的程序设计2)运行时多态运行时多态是以继承性为基础的多态性,是在程序运行时动态产生的。有时,多态性也可以专指运行时多态。本节前面部分介绍的继承性主要描述父类与子类之间的关系,而多态性还要求在这种关系的基础上,将一个对象当作它所在类的父类的对象来看待。这种将子类看做它的父类的过程称为向上转型(或上塑造型,upcasting)。“向上”的意思是从类继承层次(如图3-1)的子类(一般在较下方)向父类(一般在较上方)转型。13 13第 3 章 Java 面向对象的程序设计3.3 Java中的对象与类1.类的结构与创建类的基本结构可以表示为如下的类声明格式:14 14第 3 章 Java 面向对象的程序设计15 15第 3 章 Java 面向对象的程序设计类是创建对象的模板。通过类的构造方法可以创建对象。例如,在例3-1的main()方法中,通过new关键字调用Rectangle类的默认构造方法构造一个对象。对象创建与初始化的进一步介绍见第3.4 节。创建对象之后,通常会对对象的成员变量和方法进行访问。对对象数据的访问和对对象方法的调用通过圆点操作符(.)来完成,该操作符也称为对象成员访问操作符,访问的一般格式形如:对象引用变量.成员变量;对象引用变量.成员方法名(实参列表);16 16第 3 章 Java 面向对象的程序设计17 17第 3 章 Java 面向对象的程序设计18 18第 3 章 Java 面向对象的程序设计19 19第 3 章 Java 面向对象的程序设计2020第 3 章 Java 面向对象的程序设计2.方法的参数传递与返回方法是为了完成特定功能而组合在一起的一组语句。在其他编程语言中,方法称为过程(procedure)或函数(function)。Java中的方法一般分为构造方法和成员方法,声明方式分别见表3-1。我们首先抛开修饰符来看方法的一般组成要素。21 21第 3 章 Java 面向对象的程序设计2222第 3 章 Java 面向对象的程序设计2323第 3 章 Java 面向对象的程序设计2424第 3 章 Java 面向对象的程序设计2525第 3 章 Java 面向对象的程序设计2626第 3 章 Java 面向对象的程序设计在方法定义时,还有以下问题需要特别注意:(1)在成员方法中,如果局部变量或形参的名称与类的成员变量冲突,那么类的成员变量会被隐藏,如果要将成员变量显露出来,应在该方法中使用成员变量时加上关键字“this”。2727第 3 章 Java 面向对象的程序设计2828第 3 章 Java 面向对象的程序设计2929第 3 章 Java 面向对象的程序设计(2)方法的可变长参数列表。类型相同但个数可变的多个参数,可以通过语法“类型名 参数名”声明为方法的可变长参数,如例3-4中的“int points”。Java将可变长参数当作数组对待。即在进行方法调用时,可变长参数可接受的实参必须是一个数组或者一个实参序列,例如对ratingAverage()方法的第1次调用使用了一个匿名数组作为实参,而对该方法的第2次调用使用了5个整数的序列作为实参。在方法内部,参数名作为一个对数组的引用变量存在。3030第 3 章 Java 面向对象的程序设计31 31第 3 章 Java 面向对象的程序设计3.this关键字实际上,this关键字一般只在方法内部使用,表示对“调用方法的那个对象”的引用。这个引用一般只在实例成员方法中存在,在静态方法中则不存在。当一个对象的实例成员方法被调用时,虚拟机会为这个方法创建一个栈帧,并在栈帧中创建局部变量表,方法的每一个实参值都会有对应的局部变量作为存储空间。在这一过程中,虚拟机还会自动地在局部变量表中开辟一个局部变量,该变量能够存储对当前对象的引用,这一存在于栈帧的局部变量表中的引用变量用this表示。因此,在方法中,需要引用该方法所属类的当前对象时,可以直接用this。3232第 3 章 Java 面向对象的程序设计3333第 3 章 Java 面向对象的程序设计3.4 构造方法与对象初始化1.构造方法的特点与默认构造方法构造方法是一种特殊的方法,具有以下三个特点:(1)构造方法的名称必须与所在类的名称相同。(2)构造方法没有返回值,这与返回值为空(void)不同。(3)构造方法在创建一个对象时调用,调用时必须使用new关键字。3434第 3 章 Java 面向对象的程序设计2.对象成员的初始化根据对构造方法调用的要求,对象的实例化可以通过“new 类名(参数列表)”完成。对象的实例化过程分为3个阶段:首先,为对象分配存储空间;其次,对对象的成员变量进行初始化;第三,返回对象的引用。3535第 3 章 Java 面向对象的程序设计3636第 3 章 Java 面向对象的程序设计3737第 3 章 Java 面向对象的程序设计在实例化的第2阶段,对对象的成员变量的初始化又分为多步完成。我们定义另一个类Rectangle2来说明这些步骤,见例3-6,相应的初始化过程中的内存变化如图3-2所示。3838第 3 章 Java 面向对象的程序设计图3-2 对象成员变量初始化过程中的内存变化3939第 3 章 Java 面向对象的程序设计4040第 3 章 Java 面向对象的程序设计41 41第 3 章 Java 面向对象的程序设计综上所述,当我们希望对类中的引用类型成员变量初始化为非null引用时,可以在代码中的以下位置进行:(1)引用变量声明处进行显式初始化;(2)在类的构造方法中;(3)在一般方法中,且在使用对象之前,这种情况称为“惰性初始化”,如果程序不需要每次都生成对象,那么这种惰性初始化可以减少额外的开销;(4)在实例初始化程序块中。4242第 3 章 Java 面向对象的程序设计3.5 包与访问权限控制1.包与代码组织包用于组织一系列相关的类和接口,它提供了类的命名空间的管理与访问控制。Java平台中的类和接口都是根据功能用包进行组织的。4343第 3 章 Java 面向对象的程序设计在源代码中,可以使用package语句指定源代码中的所有类属于一个特定的包。包定义的一般格式为 package pkg1.pkg2.pkg3;4444第 3 章 Java 面向对象的程序设计在代码中使用一个类时,需要指明这个类是属于哪个包的。例如,当使用java.util包中的ArrayList类时,一种使用方法为 java.util.ArrayList list=new java.util.ArrayList();4545第 3 章 Java 面向对象的程序设计当然,在使用类时总指明类所属的包是一种很繁琐的方法,如果包的路径很深,每一条语句就会显得很长。为此,Java提供了import关键字用于引入包成员或整个包。import语句的一般格式为 import pkg1.pkg2.pkg3.(类名|*);4646第 3 章 Java 面向对象的程序设计4747第 3 章 Java 面向对象的程序设计当程序使用到其他类中定义为static final的静态常量或定义为static的静态方法时,每次引用这些常量或方法都用它们所属的类名。例如java.lang.Math类定义了静态常量PI和静态方法sin(),正常使用时例如:double d=Math.sin(Math.PI/2);在J2SE 5.0之后,Java中还支持一种静态引入语句,能够引入一个类的单个静态成员或所有静态成员,具体语法如下:import static 静态常量名|静态方法名|*;4848第 3 章 Java 面向对象的程序设计4949第 3 章 Java 面向对象的程序设计2.访问权限控制对于类的成员变量和方法,存在public、protected、包访问权限、private四种访问权限。以下分别介绍这四种权限的异同。(1)public访问权限(又称接口访问权限):所有类(包内或包外)均可访问该成员。(2)包访问权限:当前包中所有的其他类均可访问该成员。5050第 3 章 Java 面向对象的程序设计51 51第 3 章 Java 面向对象的程序设计5252第 3 章 Java 面向对象的程序设计(3)private访问权限:除了包含该成员的类之外,其他类均无法访问该成员。5353第 3 章 Java 面向对象的程序设计5454第 3 章 Java 面向对象的程序设计5555第 3 章 Java 面向对象的程序设计(4)protected访问权限(又称继承访问权限):protected权限是用于处理继承的,继承的基本思想我们已经在第3.2节进行了介绍,由于Java的继承机制在下节才具体介绍,读者可以先阅读下节的内容再回头看这一部分。5656第 3 章 Java 面向对象的程序设计5757第 3 章 Java 面向对象的程序设计5858第 3 章 Java 面向对象的程序设计综上所述,可得如下的访问权限控制的一般规则。(1)一个类或接口C对另一个类或接口D可见,当且仅当以下条件之一成立:C是public的。C和D处于同一个包中。5959第 3 章 Java 面向对象的程序设计(2)一个成员变量或方法R对另一个类或接口D可见,当且仅当以下条件之一成立:R是public的。在C中声明的R是protected的,D与C相同或者D是C的子类。如果R不是static的,那么到R的符号引用就必须包含一个到T类的符号引用,其中T与D相同或者T是D的子类或父类(关于符号引用解析的相关内容可以参见附录2)。在C中声明的R是protected的或包访问权限,并且C与D处于同一包中。R是private的,且声明在类D中。6060第 3 章 Java 面向对象的程序设计3.6 Java中的继承1.继承的一般用法继承的核心语法是在类定义中的类体之前、类名之后使用“extends 父类名”来实现的,见第3.3节。当新类的定义使用了这一语法时,表明新定义的类自动地获得了父类的所有成员变量和成员方法。也就是说,子类会包含父类的所有成员,而且复制了父类的接口。这样就保证了发送给父类对象的消息也能发送给子类对象。61 61第 3 章 Java 面向对象的程序设计6262第 3 章 Java 面向对象的程序设计6363第 3 章 Java 面向对象的程序设计6464第 3 章 Java 面向对象的程序设计2.继承与对象初始化综合上面几点,将子类对象的实例化过程的一般步骤归纳如下:(1)子类的构造方法调用父类的构造方法(通过显式的super()方法调用或编译器隐含插入的super()方法调用),这一过程递归地进行,直到根类Object的构造方法。在这一过程中,子类对象所需的所有内存空间被分配,所有成员都使用默认值初始化。6565第 3 章 Java 面向对象的程序设计(2)从根类Object的构造方法开始,自顶向下地对每个类依次执行如下两步:显式初始化以及使用实例初始化程序块进行初始化。执行构造方法主体(不包括使用super调用父类构造方法)。6666第 3 章 Java 面向对象的程序设计6767第 3 章 Java 面向对象的程序设计6868第 3 章 Java 面向对象的程序设计6969第 3 章 Java 面向对象的程序设计7070第 3 章 Java 面向对象的程序设计3.Object类java.lang.Object类是Java中所有类型的根类,Java中的所有类都是Object类的直接或间接子类。Object类中包含了所有对象(包括数组)都需要的状态和行为,例如对象比较、对象转换为字符串等。Object类的接口方法及其含义如表3-2所示。71 71第 3 章 Java 面向对象的程序设计7272第 3 章 Java 面向对象的程序设计7373第 3 章 Java 面向对象的程序设计7474第 3 章 Java 面向对象的程序设计7575第 3 章 Java 面向对象的程序设计7676第 3 章 Java 面向对象的程序设计3.7 Java多态机制1.方法重载的进一步解释在第3.2节已经介绍了面向对象程序设计的两种多态形式。对于编译时多态,由编译器在编译时根据方法签名确定具体调用哪个被重载方法。7777第 3 章 Java 面向对象的程序设计7878第 3 章 Java 面向对象的程序设计7979第 3 章 Java 面向对象的程序设计8080第 3 章 Java 面向对象的程序设计81 81第 3 章 Java 面向对象的程序设计8282第 3 章 Java 面向对象的程序设计2.成员方法重写方法重写是实现运行时多态的基础,能够保证“对外一个接口”的实现。成员变量覆盖和重写方法的使用还需要注意以下几点:(1)无论是成员变量的覆盖还是成员方法的重写,前提都是成员能够在子类中被访问到。对于父类的私有成员变量和成员方法,如果在子类中存在声明相同的成员变量和签名、返回值均相同的成员方法,两个成员变量(成员方法)是完全独立的,不存在覆盖(重写)关系。8383第 3 章 Java 面向对象的程序设计8484第 3 章 Java 面向对象的程序设计(2)变量调用方法时,调用的是子类中重写后的方法还是父类中的原方法,是由变量所指向的对象实例的类型决定的,而不是由变量本身的类型决定的。例如在例3-13中,Rectangle类的newDraw()方法依次用this引用和super引用调用draw()方法,两个引用分别指向的是Rectangle类型和Shape类型的对象,调用的也分别是两个类型各自的draw()方法。如果存在Shape类型的变量s,定义为 Shape s=new Rectangle();8585第 3 章 Java 面向对象的程序设计(3)在J2SE 5.0以后,对于子类方法和父类方法的返回类型做了一定程度的放宽。不再严格要求子类方法与父类方法的返回类型相同,而是要求子类方法返回类型是父类方法返回类型的“可替换类型”。关于可替换类型的具体含义,读者可参阅Java语言规范。在一般程序设计过程中,我们尽量沿用J2SE 5.0之前的要求。8686第 3 章 Java 面向对象的程序设计3.向上转型与运行时多态的实现子类与父类的关系可以概括为“子类也是父类的一种类型”。这一概括是由Java语言机制支撑的。8787第 3 章 Java 面向对象的程序设计8888第 3 章 Java 面向对象的程序设计8989第 3 章 Java 面向对象的程序设计9090第 3 章 Java 面向对象的程序设计91 91第 3 章 Java 面向对象的程序设计4.构造方法中的多态如果在构造方法的内部调用了当前正在构造的对象的动态绑定的方法,那么会发生什么情况呢?如果这个动态绑定的方法在当前类中被重写,那么会调用重写后的方法定义。但是,调用效果可能难以预料,因为动态方法可能会使用一些当前类特有的成员变量,而它们在构造方法执行完毕之前,可能还未被正确初始化,从而导致一些错误。9292第 3 章 Java 面向对象的程序设计9393第 3 章 Java 面向对象的程序设计9494第 3 章 Java 面向对象的程序设计5.强制类型转换与第2章所介绍的收缩(narrowing)转换类似,将一个父类类型的变量转换为一个子类类型的变量,也需要使用强制转换的语法。这种对象类型的强制转换又称为向下转型(downcasting)。向下转型有其必要性,假定我们有一个父类类型的变量引用到子类对象,如果不进行向下转型,就不能访问到子类特有的那些成员。9595第 3 章 Java 面向对象的程序设计9696第 3 章 Java 面向对象的程序设计9797第 3 章 Java 面向对象的程序设计通常情况下,在进行向下转型时,需要考虑RTTI检查无法通过的情况,即处理可能因此抛出的异常。除此之外,另一种避免向下转型错误的方法是,在对变量进行向下转型前,先使用instanceof关键字检测变量所引用的对象是否是指定的子类型的对象,如果是,再进行向下转型。

    注意事项

    本文(【精品】java 实用程序设计(西电版第3章 java面向对象的程序设计(可编辑.ppt)为本站会员(1595****071)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开