1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
JAVA04概要

第4章 接口、抽象类与包 学习重点 抽象类 接口 包机制 第4章 接口、抽象类与包 4.1 抽象类 4.2 接口 4.3 包 4.1 抽象类 4.1.1 抽象方法 4.1.2 抽象类 4.1.1 抽象方法 抽象方法在形式上就是包含abstract修饰符的方法声明,它没有方法体,也就是没有实现方法。 抽象方法的声明格式如下: abstract 返回数据类型 方法名(参数…); 可见abstract方法只有方法头的声明,而用一个分号来代替方法体的定义。至于方法体的具体实现,那是由当前类的不同子类在它们各自的类定义中完成的。也就是说,各子类在继承了父类的抽象方法之后,再分别用不同的语句和方法体来重写它,形成若干个名字相同,返回值相同,参数列表也相同,但具体功能有一定差别的方法。 如果一个类中含有抽象方法,那么该类也必须声明为抽象的,否则在编译时编译器会报错。 4.1.2 抽象类 abstract是抽象修饰符,可以用来修饰方法或类。当一个类被声明为abstract时,这个类被称为抽象类。 定义一个抽象类其基本格式如下: abstract class ClassName{ ... } 抽象类不能被实例化,在程序中如果试图创建一个抽象类的对象,编译时Java编译器会提示出错。 抽象类中最常见的成员就是抽象方法。抽象方法形同占位符,它需要在子类中实现。 抽象类中也可以包含供所有子类共享的非抽象的成员变量和成员方法。 继承抽象类的非抽象子类只需要实现其中的抽象方法,对于非抽象方法既可以直接继承,也可以重新覆盖。 假设设计一个形状(shape)的父类CShape,由此类可派生出圆形(circle),长方形(rectangle)和三角形(triangle)等几何形状的类。则父类于子类的派生关系描绘成如下所示。 假设这些几何形状均具有“颜色”(color)这个属性,因此可以把color这个数据成员,以及赋值color的方法均设计在父类里,让它继承给各个形状的子类较为方便,如此就不用在每一个几何形状的子类里,设计相同的程序代码来处理“颜色”这个属性的问题。 另外,如果想为每一个几何形状的类设计一个area()方法,用来计算几何形状的面积,因每种几何形状的面积计算方式并不相同,所以把area()方法的处理方式设计在父类里并不恰当,但每一个由CShape父类所派生出的子类又都需要用到这一个方法,因此可以在父类里只声明area()方法,而把area()方法处理的方法留在子类里来定义,即把area()声明成抽象方法即可解决这个问题。 【例4.1】抽象类的实现 由于抽象类是它的所有子类的公共属性的集合,所以使用抽象类的一大优点就是可以充分利用这些公共属性来提高开发和维护程序的效率。 4.2 接口 4.2.1 接口定义 4.2.2 接口的实现 4.2.3 接口作为类型 4.2.4 接口不应改变 4.2.5 抽象类和接口的比较 4.2.1 接口定义 接口的主要作用是可以帮助实现类似于类的多重继承的功能。 为了使Java程序的类层次结构更加合理,更符合实际问题的本质,编程者可以把用于完成特定功能的若干属性组成相对独立的属性集合。凡是需要实现这种特定功能的类都可以继承这个属性集合并在类内使用它,这种属性集合就是接口。 接口定义的仅仅是实现某一特定功能的一组功能的对外接口和规范,并没有真正实现这个功能。真正实现在继承这个接口的各个类中完成,因而通常把接口功能的继承称为实现。 关键字interface可以从类的实现中抽象一个类的接口,即使用interface可以指定一个类必须做什么,而不是规定它如何去做。接口在语句构成上与类相似,但是它们缺少实例变量,而且它们定义的方法是不含方法体的。 一个类可以实现多个接口。 接口体的声明是定义接口的重要部分,接口体由两部分组成,一部分是对接口中属性的声明,另一部分是对接口中方法的声明。 Java中声明接口的语法如下: [public] interface 接口名 [extends 父接口名列表] { //接口体; //常量域声明 [public] [static] [final] 域类型 域名=常量值; //抽象方法声明 [public] [abstract] [native] 返回值 方法名(参数列表) [throw 异常列表]; } 接口中的属性都是用final修饰的常量,故接口中定义的属性必须初始化,而且这些属性都是static的。 所有的成员函数都将隐式地声明为公有的(public)和抽象的(abstract),也就是说它们都只有说明没有定义,在方法声明后会需要一个分号。 接口中的方法都是用abs

文档评论(0)

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

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

1亿VIP精品文档

相关文档