已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
语言程序设计 刘炯西安电子科技大学 通信工程学院 第十章抽象类和接口 学习目标设计并使用抽象类声明接口来模拟弱继承关系使用Comparable接口定义自然顺序了解抽象类与接口的异和同声明自定义接口 abstract修饰符 abstract 抽象 类不可以被实例化只能在子类被扩展和具体实现abstract 抽象 方法没有具体实现 只有方法头定义 回顾第9章 Shape Shape getColor String setColor c String void color String filled boolean createDate java util Date Circle Circle Circle newRadius double getRadius double setRadius newRadius double void getArea double radius double Rectangle Rectangle Rectangle w double h double getWidth double setWidth w double void getHeight double setHeight h double void getArea double width double height double 这个符号表示继承关系 父类 子类 子类 Shape Shape getColor String setColor c String void getArea double color String filled boolean createDate java util Date Circle Circle Circle newRadius double getRadius double setRadius newRadius double void radius double Rectangle Rectangle Rectangle w double h double getWidth double setWidth w double void getHeight double setHeight h double void width double height double 抽象类 父类 子类 子类 抽象方法 表示protected修饰符 斜体表示抽象类 抽象方法 abstractpublicclassShape privateStringcolor privatebooleanfilled publicjava util DatecreateDate publicShape publicStringgetColor returncolor publicvoidsetColor Stringc color c abstractpublicdoublegetArea publicclassCircleextendsShape privatedoubleradius publicCircle publicCircle doublenewRadius radius newRadius publicdoublegetRadius returnradius publicvoidsetRadius doubleradius this radius radius publicdoublegetArea returnMath PI radius radius 用abstract关键字表示抽象类 用abstract关键字表示抽象方法抽象方法没有方法体 父类抽象方法的实现 publicclassRectangleextendsShape privatedoublewidth privatedoubleheight publicRectangle publicRectangle doublew doubleh width w height h publicdoublegetWidth returnwidth publicvoidsetWidth doublew this width w publicdoublegetHeight returnheight publicvoidsetHeight doubleh this height h publicdoublegetArea returnwidth height 用extends关键字表示继承 父类抽象方法的实现 注意 非抽象类不能包含抽象方法如果一个抽象父类的子类不能实现所有的抽象方法 它必须声明为抽象的换句话说 在一个由抽象类扩展出来的非抽象类中 所有的抽象方法都必须实现 即使这个子类不使用它们 抽象类不能用new运算符实例化 但仍然可以定义它的构造方法 这种构造方法将在它子类的构造方法中被调用 例如 Shape的构造方法在Circle类和Rectangle类中被调用 注意 包含抽象方法的类必须是抽象的 但是 允许声明没有抽象方法的抽象类 这种情况下 不能使用new操作符创建类的实例 这种类用于定义新子类 子类可以声明为抽象的 即使它的父类是具体的 例如 Object类是具体的 但是它的子类 如Shape 可以是抽象的 注意 子类可以覆盖它父类的方法 并将其声明为abstract的 这种方法非常少用 但是当父类中方法的实现在子类中无效时 这种方法就有用了 这种情况下 子类必须声明为抽象的 注意 不能用new运算符创建抽象类的实例 但是 抽象类可以用作数据类型 因此 下面的语句是正确的 它创建了一个元素是Shape类型的数组 Shape shapes newShape 10 举例 publicclassTestShape publicstaticvoidmain String args Shapeshape1 newCircle 5 Shapeshape2 newRectangle 5 3 System out println Thetwoobjectshavethesamearea isAreaEquals shape1 shape2 displayArea shape1 displayArea shape2 publicstaticbooleanisAreaEquals Shapeobject1 Shapeobject2 returnobject1 getArea object2 getArea publicstaticvoiddisplayArea Shapeobject System out println System out println Theareais object getArea 接口 接口 interface 是一种与类相似的结构 只包含常量和抽象方法 接口在许多方面与抽象类相近 但是抽象类除了包含常量和抽象方法外 还可以包含变量和具体方法为了区分接口和类 Java采用下述语法声明接口 publicinterfaceInterfaceName constantdeclarations methodsignatures 接口是一种特殊的类 在Java中 接口被认为是特殊的类 就像通常的类一样 每个接口编译为独立的字节码文件 与抽象类相似 不能使用new操作符创建一个接口的实例 但是大多数情况下 使用接口或多或少有点像使用抽象类 例如 可以使用接口作为变量的数据类型或类型转换的结果 等等 定义接口 假设要设计一个求两个对象较大者的一般方法 对象可以是学生 圆或矩形 因为不同类型对象的比较方法不同 需要定义一个一般方法来判断两个对象的大小顺序 然后调整这个方法来比较学生 圆或矩形 例如 可以用学生的ID号作为比较学生的键值 半径作为比较圆的键值 面积作为比较矩形的键值 可以用接口定义一个一般方法compareTo 如下所示 packagejava lang publicinterfaceComparable 比较规则 如果本对象大于输入参数o 则返回1 小于则返回 1 相等返回0 publicintcompareTo Objecto 声明类以实现Comparable接口 Shape Rectangle ComparableRectangle java lang Comparable compareTo o Object int 抽象类 接口 ComparableRectangle类 publicclassComparableRectangleextendsRectangleimplementsComparable publicComparableRectangle doublewidth doubleheight super width height 规则 如果本对象的面积大于o的面积 返回1 小于则返回 1 等于则返回0publicintcompareTo Objecto if oinstanceofComparableRectangle return 1 if getArea ComparableRectangle o getArea return1 elseif getArea ComparableRectangle o getArea return 1 elsereturn0 publicstaticvoidmain String args ComparableRectanglecr1 newComparableRectangle 3 4 ComparableRectanglecr2 newComparableRectangle 4 5 System out println pareTo cr2 用implements关键字表示实现接口 针对接口编程设计一个Max类 可以得到两个输入参数之中的大者 publicclassMax publicstaticComparablemax Comparablea Comparableb if pareTo b 0 returna elsereturnb publicstaticvoidmain String args ComparableRectanglecr1 newComparableRectangle 3 4 ComparableRectanglecr2 newComparableRectangle 4 5 ComparableRectanglemaxCr ComparableRectangle Max max cr1 cr2 System out println Maxrectangle sareais maxCr getArea 接口和抽象类 在接口里 数据必须是常量 抽象类可以有多种类型的数据 接口中每个方法都只有方法头没有具体实现 抽象类可以有具体方法 在接口中 所有的数据域都是publicfinalstatic的 所有的方法都是publicabstract的 由于这个原因 这些修饰符可以忽略 如下所示 接口中定义的常量能用下面的方式访问 接口名 常量名 例如 Person handNumber publicinterfacePerson publicstaticfinalinthandNumber 2 publicabstractvoidsleep publicinterfacePerson inthandNumber 2 voidsleep 等效于 所有的类共享同一个根 Object类 但接口没有共同的根 与类相似 接口也可以定义一个类型 一个接口类型的变量可以引用任何实现该接口的类的实例 如果一个类扩展了一个接口 这个接口就类似于该类的一个父类 可以将接口当作一个数据类型使用 能够将接口类型的变量转换到它的子类 反过来也可以 假设c是图中Class2的一个实例 那么c也是Object Class1 Interface1 Interface1 1 Interface1 2 Interface2 1和Interface2 2的实例 警告 接口冲突 当一个类实现有冲突信息的两个接口时 会引起错误 例如 两个相同的常量有不同的值 两个方法有相同的头标志 但返回类型不同 这种类型的错误由编译器检测 publicinterfacePerson publicstaticfinalinthandNumber 2 publicabstractvoidsleep publicinterfaceThief publicstaticfinalinthandNumber 3 publicabstractvoidsleep publicclassZhangSanimplementsPerson Thief 使用接口还是使用类呢 抽象类和接口都可以用于模拟共同特征 在什么情况下应该使用接口 什么情况下应该使用类呢 一般来说 强 是 关系 strongis arelationship 明显地描述了父子关系应该用类模拟 例如 学生是一个人 所以学生和人的关系应该用类模拟 弱 是 关系 weakis arelationship 也称为类属关系 is kind ofrelationship 是指对象拥有某种属性 弱是关系可以用接口来模拟 例如 所有的字符串都是可比较的 所以String类应该实现Comparable接口 如果需要多重继承 也可以使用接口避开单重继承的限制 在多重继承情况下 只能将一个类设计为父类 其他的设计为接口 举例 创建自定义接口 publicinterfaceEdible publicStringhowToEat classAnimal classChickenextendsAnimalimplementsEdible publicStringhowToEat return Fryit classTigerextendsAnimal abstr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年线上客服代表招聘面试参考题库及答案
- 2025年投资助理招聘面试题库及参考答案
- 2025年教学秘书招聘面试题库及参考答案
- 2025年精益生产经理招聘面试参考题库及答案
- 2025年企业IT支持专员招聘面试参考题库及答案
- 2025年财务风险评估师招聘面试题库及参考答案
- 2025年宣传推广经理招聘面试参考题库及答案
- 2025年速运管理专员招聘面试题库及参考答案
- 2025年工程技术经理招聘面试题库及参考答案
- 2025年大学招生顾问招聘面试题库及参考答案
- 音乐教师素养知识培训课件
- 小学科学知识竞赛题库(试题及答案)
- 2024年恒瑞医药ESG综合报告:以社会责任推动医药产业的可持续发展
- 医院账务合并方案模板(3篇)
- 护理人文关怀试点病房汇报
- 2025年公共交通智能调度系统采购及运维服务合同
- 2025年北京共青团入团考试题及答案
- 野生动物监测技术
- 预防早恋27安全教育课件
- 东北师范大学《大学日语1》2023-2024学年第一学期期末试卷
- 颌面外科进修病例汇报
评论
0/150
提交评论