第3章类与继承精选文档.ppt

上传人:石*** 文档编号:47506541 上传时间:2022-10-02 格式:PPT 页数:22 大小:926.50KB
返回 下载 相关 举报
第3章类与继承精选文档.ppt_第1页
第1页 / 共22页
第3章类与继承精选文档.ppt_第2页
第2页 / 共22页
点击查看更多>>
资源描述

《第3章类与继承精选文档.ppt》由会员分享,可在线阅读,更多相关《第3章类与继承精选文档.ppt(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第3章类与继承本讲稿第一页,共二十二页主要内容l3.1类和对象l3.2面向对象特性l3.3关键字staticl3.4关键字final本讲稿第二页,共二十二页3.1类和对象 类是的一种重要的复合数据类型,是组成Java程序的基本要素,也是面向对象的程序设计的基本单位。类定义了某类对象的共有变量和方法。变量是现实对象的属性或状态的数字化表示,方法是对现实对象进行的某种操作或其对外表现的某种行为。对象是由一组相关的变量和方法共同组成的一个具体的软件体。类实例化就成为对象。对象和类之间的关系就如同房子和其设计图纸的关系。类的作用就象一个模板,所有对象实例依照它来创建。本讲稿第三页,共二十二页3.1.1

2、类声明 publicabstract|finalclassclassNameextendssuperClassNameimplementsinterfaceNameList.classbody(类体).本讲稿第四页,共二十二页3.1.2类成员 类体是一个类的功能部分,由变量和方法两部分组成,两者通称为类成员。类体的格式如下:classclassName/成员变量public|protected|privatestaticfinaltransientvolatiletypevariableName;/成员方法public|protected|privatestaticfinal|abstract

3、nativesynchronizedreturnTypemethodName(paramList)throwsexceptionListstatements本讲稿第五页,共二十二页3.1.2.1变量 成员变量表示类的静态属性和状态,可以是任何的类型,既可以是基本数据类型也可以是复合数据类型。这就是说一个类的变量可以是其他类的对象。类成员变量缺省值:变量的类型初始值布尔型(boolean)false字符型(char)u0000整型(byte、short、int、long)0浮点型(float,double)+0.0f或+0.0d对象引用null本讲稿第六页,共二十二页3.1.2.2方法 用户定义

4、的操作均用方法(method)来实现,方法由一组完成某种特定功能可执行的代码组成。方法包括两种:构建器(constructor)和普通方法。方法的参数表由成对的类型及参数名组成,相互间用逗号分隔。如果方法无参数,则参数表为空。方法内部定义的局部变量不能和方法的参数同名。方法体中声明的局部变量的作用域在该方法内部。若局部变量与类的成员变量同名,则类的成员变量被隐藏。本讲稿第七页,共二十二页main()方法和命令行参数lmain():程序的入口方法。l命令行参数并不是必须的,但大多数应用都热衷于这种方式向程序输入一组参数。本讲稿第八页,共二十二页3.1.2.3构建器 l构建器(constructo

5、r)是提供对象初始化的专用方法。它和类的名字相同,但没有任何返回类型,甚至不能为void类型。l构建器在对象创建时被自动地调用,它不能被显式调用。l如果在定义Java类时没有创建任何构建器,Java编译器自动添加一个默认的构建器。l可以通过方法的重载来提供多个构建器。l构建器中利用this关键字调用类中其他构建器,需要注意的是利用this来调用类中其他构建器时,其必须放在代码第一行。l构建器只能由new运算符调用。new运算符,除了分配存储之外,还初始化实例变量,调用实例的构建器。l类是用来定义对象状态和行为的模板,对象是类的实例。类的所有实例都分配在可作无用单元回收的堆中。声明一个对象引用并

6、不会为该对象分配存储,程序员必须显式地为对象分配存储,但不必显式删除存储,因为无用单元回收器会自动回收无用的内存。本讲稿第九页,共二十二页3.1.3关键字this lthis用在方法中,表示引用当前对象。l在一个方法内部如果局部变量与类变量的名字相同,则局部变量隐藏类变量,在这种情况下如果要访问类变量,必须使用this。l在类的构建器和非静态方法内,this代表当前对象的引用。利用关键字this,可以在构建器和非静态方法内,引用当前对象的任何成员。l一个方法引用它自己的实例变量及其他实例方法时,在每个引用的前面都隐含着“this”。本讲稿第十页,共二十二页3.1.4方法重载 l方法重载(ove

7、rload)是指多个方法具有相同的名字,但是这些方法的参数必须不同(或者是参数的个数不同,或者是参数类型不同)。l方法在同一个类的内部重载,类中方法声明的顺序并不重要。l返回类型不能用来区分重载的方法。方法重载时,参数类型的区分度一定要足够,例如不能是同一类型的参数。重载的认定是指要决定调用的是哪一个方法,在认定重载的方法时,不考虑返回类型。l方法重载时,编译器会根据参数的个数和类型来决定当前所使用的方法。l通过参数个数来区分方法重载,比较容易分辨;而通过参数类型来区分方法重载,要格外小心,避免出现“二义性”。本讲稿第十一页,共二十二页3.1.5类继承 l在构造一个新的类时,首先找到一个已有的

8、类,新类在这个已有类的基础上构造,这种特性我们称之为继承,也可以称作派生(derived)。继承使用关键字extends声明。继承出的类称为原来类的子类,而原来类被称为父类或者超类。l类的继承具有传递性:如果B是A的子类,C是B的子类,则C是A的子类。l关键字extends只能引出一个超类superClassName,即Java语言仅支持单继承(singleinheritance)。l类的初始化过程。lObject是任何类的父类。lequals和toString 方法。Java语言之所以没有采用C+的多继承机制,是为了避免多继承带来的诸多不便,比如:二义性的产生、编译器更加复杂、程序难以优化等

9、问题。Java语言虽然仅支持单继承,但是可以通过接口机制来支持某些在其他语言中用多继承实现的机制(详见第4章)。本讲稿第十二页,共二十二页3.1.7源文件 l源文件是我们开发程序的基本单位,Java源文件是扩展名为java的纯文本文件。Java编译器处理Java源文件,输出Java字节码文件,扩展名为class的文件。l一个Java源文件中只允许定义零个或一个public类或接口,但可以同时有不受限制多个default类和接口。l如果源文件包含了public类或接口,则文件名必须和public类或接口一样;如果源文件中不包含public类或接口,文件名可以是任意合法的文件名。l一个Java源文

10、件的内容通常由三个功能部分构成:package包声明:命名当前包。import包引入:引入其他程序包。类和接口定义:定义新的类和接口。本讲稿第十三页,共二十二页3.2 面向对象特性 l3.2.1封装性l3.2.2继承性l3.2.3多态性本讲稿第十四页,共二十二页3.2.1封装性 l访问控制符是Java语言控制对方法和变量访问的修饰符。对象是对一组变量和相关方法的封装,其中变量表明了对象的状态,方法表明了对象具有的行为。通过对象的封装,实现了模块化和信息隐藏;通过对类的成员施以一定的访问权限,实现了类中成员的信息隐藏。lprivateldefaultlprotectedlpublic本讲稿第十五

11、页,共二十二页3.2.2继承性 l继承是面向对象程序设计的主要特点和优势之一。利用类继承,可利用已有的类方便地建立新的类,最大程度地实现代码重用。lJava由继承引出了“多态”的概念:方法的多态和类型的多态。(1)关于方法的多态,3.1.2.4节详细介绍了在一个类中方法的重载(overload),这是一种方法多态的形式。下一节还将引入了另一种方法多态的形式:扩展类继承其超类的方法,它们有相同的基调,但对方法的实现加以改写。这种方法多态形式在有些书中也称为方法的覆盖(override)。(2)类型的多态。假设由超类F扩展出类Z,即类Z继承了超类F。由类Z实例化创建的对象d不仅属于类Z,而且属于其

12、超类F,也就是说,对象d的域包含了超类F的域,因此对象d也是超类F的对象。所以创建一个类对象,也隐含着创建了其超类的一个对象,因此,类构建器往往需要调用其超类构建器。另一个结论是,一个类的对象不仅可以以创建类的类型所引用,也可以以其超类的类型所引用。所以Object类型的引用可以引用任何对象。本讲稿第十六页,共二十二页3.2.3多态性 l在Java语言中,多态性体现在两个方面:由方法重载实现的静态多态性(编译时多态)和方法覆盖实现的动态多态性(运行时多态)。(1)编译时多态。在编译阶段,编译器会根据参数的不同来静态确定调用相应的方法,即具体调用哪个被重载的方法。(2)运行时多态。由于子类继承了

13、父类所有的属性(私有的除外),所以子类对象可以作为父类对象使用。程序中凡是使用父类对象的地方,都可以用子类对象来代替。一个对象可以通过引用子类的实例来调用子类的方法。重载方法的调用原则:Java运行时系统根据调用该方法的实例,来决定调用哪个方法。对子类的一个实例,如果子类重写了父类的方法,则运行时系统调用子类的方法;如果子类继承了父类的方法(未重写),则运行时系统调用父类的方法。本讲稿第十七页,共二十二页3.3关键字static l有时候,可能需要同类的各对象之间共享某些变量或者方法,这些共享的变量或是方法被称为类变量或者类方法。类变量或者类方法统称为静态对象。l用static关键字来声明类变

14、量和类方法,格式如下:类变量:staticvariableTypevariableName;类方法:staticreturnTypeclassMethod(paramlist)每个实例对象对类变量的改变都会影响到其他的实例对象。类变量可通过类名直接访问,无需先生成一个实例对象,也可以通过实例对象访问类变量。类方法不能访问实例变量,只能访问类变量。类方法可以由类名直接调用,也可由实例对象进行调用。类方法中不能使用this或super关键字。静态变量可以有初值,就象实例变量一样。静态变量和方法都是通过类名字来访问的。为方便起见,也可以用具体对象来访问。如果在声明时不用static 关键字修饰变量或

15、者方法,则表示是实例变量或实例方法。每个对象的实例变量都独立分配内存,通过对象来访问这些实例变量。实例方法可以对当前对象的实例变量进行操作,也可以对类变量进行操作,实例方法由实例对象调用。本讲稿第十八页,共二十二页3.4关键字final lfinal变量:final关键字修饰的变量,只能被初始化一次。lfinal方法:表示这个方法不需要进行扩展(继承),也不允许任何子类覆盖这个方法,但是可以继承这个方法。lfinal类:表示这个类不能被任何其他类继承。lfinal类与普通类的使用几乎没有差别,只是它失去了被继承的特性。本讲稿第十九页,共二十二页3.5对象复制l不能使用赋值语句(=)进行对象的赋

16、值。l要使得一个类的对象具有复制能力,必须显式地定义clone()方法,并且该类必须实现Cloneable接口。lCloneable接口中没有定义任何内容,只是起“标记”的作用。本讲稿第二十页,共二十二页3.6内部类 l在一个类的内部还可以定义类,这就是内部类,也称为嵌套类。l内部类的定义范围要比包小,它定义在另一个类里面,也可以定义在一个方法里面,甚至可以定义在一个表达式中。与内部类相对而言,包含内部类的类成为外部类或顶级类。l内部类本身是一个类,但它同时又是外部类一个成员。作为外部类的成员,它可以毫无限制地访问外部类的变量和方法,包括private成员。这和private的含义并不矛盾,因为private修饰符只是限制从一个类的外部访问该类成员的权限,而内部类在外部类内部,所以它可以访问外部类的所有资源。l内部类又具有多种形式,可细分为:静态内部类、成员内部类、本地内部类和匿名内部类。本讲稿第二十一页,共二十二页3.7小结 l类是Java面向对象编程的基本元素,它定义了一个对象的结构和功能。l构建器。l类继承,this和superl类变量(static类型)、方法和实例变量、方法。l方法覆盖和重载。l面向对象特性。本讲稿第二十二页,共二十二页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

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

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