已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章继承和多态性、继承可用于基于现有类构建新类、向新类添加新成员或更改继承的成员以满足新需求。 基于继承导出多态性,以解决子类的父类的成员重复问题。 利用4.1继承的概要、继承,能够很好地实现代码再利用问题。 如果使用现有类构建新类,新类将保留现有类的属性和行为,并且可以根据需要添加新属性和行为。 例如,卡车具有一般的汽车属性,但特有的属性是装卸。 4.1.1超类、子类和继承的类通常称为“超类”或“父类”,继承的类通常称为“子类”。 继承节省了许多用于定义新类的工作,并且简单地重复使用代码。 子类可以选择复盖现有的属性和方法,还是添加新的属性和方法。 继承4.1.2层次,继承是代码重用的一种方法,只有在需要向新类添加新操作并将现有类的默认行为集成到新类中时,才需要继承现有类。 在4.2Java中继承,在Java中,实际上所有类都从Java.lang.Object类直接或间接继承,这可以说是Object类是Java的总根类。 在实际开发中,开发人员自己定义的类将直接从Object类继承,除非另行指定。 4.2.1派生子类,在Java中类的继承通过entends关键字实现。 创建新类时,可以使用extends为新类指定父类。 具体语法如下: class子类名extends父类名子类体、4.2.2继承规则和1 .成员变量继承规则取决于对应的访问限制: public,private,protected,default引用示例1,22 .成员变量隐藏成员这意味着,直接在子类中调用此成员变量时,将调用其自身在子类中的成员变量,从父类继承的成员变量请参见例3、3、3,4.2.3中的方法继承和垄断。 方法继承继承子类可以使用父类的方法,垄断在子类中重新定义父类的方法。 1 .方法的继承方法也是成员,并且可以类似地确定和限制继承。 示例42 .在方法的独占子类的自方法中,如果方法名称与继承的方法相同,则配置方法重写(有时称为方法独占)。 请参见示例5、5、5,4.2.4this和super。 在Java中,this和super与继承密切相关。 this通常引用当前对象,而super通常引用父对象。 1.this方法中的对象与当前对象的成员具有相同的名称。 在这种情况下,为了避免混淆,可以使用this关键字来指定使用成员,方法this .成员名称隐式引用对象的实例变量和方法。 示例6、7、82.super super引用父类的成员,该成员包括父类的构造函数、属性和方法。 使用的方法是super变量名或super .方法名(实际参数)。 例9、4.3参照强制型变换,将一种类型强制性变换成另一种数据类型的过程称为强制型变换。 本节中的强制类型转换仅在继承过程中发生,而不是基本数据类型转换。 引用类型转换是对象引用的强制类型转换。 指自己的对象实例类型,而不考虑对象引用的类型。 1/汽车类型的引用c汽车类型的对象2Carc=newCar (); 3Vehiclev=newCar (); 请参见示例10、11和4.4动态绑定。 动态绑定是指当对象调用方法时,可以自己确定应该调用谁的方法。 因此,动态绑定一般继承,在方法超载时发生。 如果发生方法超载,编译器如何确定调用方法? 例如,调用c.f(arg )时,必须首先将c声明为类b的对象。 如果b类中存在多个f方法,则只是f的参数类型不同而调用f(int )或f(String ),编译器将列出b类的所有f方法以及b类的名为public的f方法。如果存在与c.f (arg ) arg类型匹配的方法,则调用此方法。 因此,调用哪个方法取决于隐式参数的实际类型。 该过程可能是动态结合的过程。 示例12,4.5继承的终止: Final类和Final方法、关键字Final不仅修饰变量,还对类及其方法的继承有很大影响。 请参见示例13、4.5.1final类。 如果关键字final用于限定类,则表示类不能派生子类。 只有在应该何时使用final修饰类,并且类中的所有方法都不应被复盖时,才需要创建最终(final )类。 如果使用4.5.2Final方法或final关键字限定方法,则该方法不能被子类复盖,只能继承。 要正确使用final方法,只有在复盖具有子类的方法时,才将此方法设置为final方法。 例14、4.6参照抽象类,在现实世界中,当人们了解世界时,将现实世界中许多具有相同特征的东西分类为抽象类。 例如,如果是很多具体的植物果实的总称(抽象类),需要提出果实的时候,不是苹果而是香蕉等具体种类的实例,不能只提出果实。 如果需要抽象类的实例,则只能将其替换为特定类的实例。 Java提供抽象类,不能实例化。 唯一的目的是继承扩张。 4.6.1抽象类从上到下看类的分层结构,位于上位的类更具通用性。 通常,这些公共类被设置为导出其他类的基类。 在Java中,可以使用abstract关键字声明抽象类和抽象方法。 下面的示例将Car类声明为抽象类。 示例15,4.6.2请参见抽象方法。 抽象方法充当子类中具体实现的占位符。 抽象的方法是,只有方法宣言,没有方法主体,使用abstract关键字进行宣言的方法。 由于抽象方法没有方法主体,因此声明的结尾用分号表示,然后是抽象方法的声明。 publicabstractvoidstartup () : 例如16、17、4.7多态性、多态性虽然实际上意味着不同的对象具有相同的轮廓或形态,但是具体实施的过程却有很大不同。 例如,驾驶员知道驾驶过程中“用红灯刹车”。 这与驾驶员驾驶的车型无关,所有的车都有相同的轮廓和形态的刹车。 在Java开发中,基于继承的多态性是指对象功能的调用者通过超类的参照进行方法调用。 超级引用可以呼叫各种各样的子级别,使车驾驶员能够驾驶各种各样的车。 示例18、4.8所有类的超类: Object类和Java的所有类都直接或间接从Object类继承,因此Object类具有的功能是所有类都具有的。 主要包括toString、equals和hashCode方法。 1.toString方法toString方法是Object中返回对象字符串表示形式的重要方法之一,可以在实际运行或调试代码时检索字符串表示形式的对象状态信息。 示例19,20,4.8请参见所有类的超类:在Object类和2.equals方法的含义之前,使用equals方法比较两个String类的内容是否相同。 事实上,equals方法来自Object类,String类重写为满足比较字符串内容的要求。 在Object类中设计此方法是为了通过改写继承的类来满足比较不同类型对象是否等价的要求。 在Object类中,此方法的实现对应于以下代码: 1 publicbooleanqu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论