07-面向对象:抽象和接口程序.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《Java程序设计》 上一章内容回顾 6. 面向对象:继承和多态 类的继承 继承 重写父类的方法 父类实例的super引用 调用父类的构造器 多态 多态性 引用变量的强制类型转换 instanceof运算符 继承和组合 7. 面向对象:抽象和接口 7.1 抽象类 7.1.1 抽象方法和抽象类 7.1.2 抽象类的作用 7.2 更彻底的抽象:接口 7.2.1 接口的概念 7.2.2 接口的定义 7.2.3 接口的继承 7.2.4 使用接口 7.2.5 接口和抽象类 7.3 课后作业 7.1 抽象类 当编写一个类时,常常会为该类定义一些方法,这些方法用以描述该类的行为方式,那么这些方法都有具体的方法体。但在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法。 例如定义了一个Shape类,这个类应该提供一个计算周长的方法calPerimeter(),但不同Shape子类对周长的计算方法是不一样的,即Shape类无法准确知道其子类计算周长的方法。 7.1 抽象类 可能有人会提出,既然Shape不知道如何实现calPerimeter()方法,那就干脆不要管它了!这不是个好思路:假设有一个Shape引用变量,该变量实际上引用到Shape子类的实例,那么这个Shape变量就无法调用calPerimeter()方法,必须将其强制类型转换为其子类类型,才可调用calPerimeter()方法(详见上一章的内容),这就降低了程序的灵活性。 如何既能让Shape类里包含calPerimeter()方法,但又无需提供其方法实现呢?使用抽象方法即可满足该需求:抽象方法是只有方法签名,没有方法实现的方法。 7.1 抽象类 7.1.1 抽象方法和抽象类 抽象方法和抽象类都必须使用abstract修饰符来定义,有抽象方法的类只能定义成抽象类,抽象类里也可以没有抽象方法。 抽象方法和抽象类的规则如下: 抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有方法体。 抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。即使抽象类里不包含抽象方法,这个抽象类也不能创建实例。 抽象类可以包含属性、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类、枚举类六种成分。抽象类的构造器不能用于创建实例,主要用于被其子类调用。 含有抽象方法的类必须定义成抽象类!(对!) 没有抽象方法的类就不是抽象类?(错!) 7.1 抽象类 7.1.1 抽象方法和抽象类 含有抽象方法的类只能被定义成抽象类。含有抽象方法的类包含以下三种情形: 直接定义了一个抽象方法; 继承了一个抽象类,但没有完全实现父类包含的抽象方法; 实现了一个接口,但没有完全实现接口所包含的抽象方法。 7.1 抽象类 7.1.1 抽象方法和抽象类 抽象方法和抽象类的定义: 定义抽象方法只需在普通方法上增加abstract修饰符,并把普通方法的方法体(也就是方法后花括号括起来的部分、包括花括号)全部去掉,并在方法后增加分号即可。 定义抽象类只需在定义类时增加abstract修饰符即可。甚至把一个普通类(没有包含抽象方法的类)增加abstract修饰符后它也将变成抽象类。 下面定义一个Shape抽象类。 程序清单:chapter07\Shape.java 7.1 抽象类 7.1.1 抽象方法和抽象类 7.1 抽象类 7.1.1 抽象方法和抽象类 下面再定义一个Triangle类。Triangle类被定义为普通类,因此必须实现Shape类里的所有抽象方法。 程序清单:chapter07\Triangle.java 7.1 抽象类 7.1.1 抽象方法和抽象类 下面再定义一个Circle普通类,Circle类也是Shape类的一个子类。 程序清单:chapter07\Circle.java 7.1 抽象类 7.1.1 抽象方法和抽象类 以上Shape、Triangle和Circle三个类的继承层次结构为: 抽象类类名为斜体 抽象方法名为斜体 (UML的类图) 7.1 抽象类 7.1.1 抽象方法和抽象类 当abstract修饰类时,表明这个类只能被继承,当abstract修饰方法时,表明这个方法必须由子类提供实现(即重写)。而final修饰的类不能被继承,final修饰的方法不能被重写。因此final和abstract永远不能同时使用。 7.1 抽象类 7.1.2 抽象类的作用 抽象类体现的就是一种模板模式(设计模式的一种)的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会大致保留抽象类的行为方法。 【提示】软件也有设计模式。 下面再介绍一个模板模式的范例,在这个范

文档评论(0)

1112111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档