07 抽象类和接口.doc

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

第7章 抽象类和接口 抽象类和接口也是类,它们都是引用类型的,抽象类和接口比普通的类更抽象。 1 抽象类 语法: 使用关键字abstract修饰的类叫抽象类,抽象类中可以含有抽象方法和非抽象方法。抽象类不能用new实例化。 使用关键字abstract修饰的方法叫抽象方法,抽象方法只有原型,而没有实现。抽象方法只能写在抽象类中。 抽象类是引用类型的。 例1:一个抽象类 abstract class A // { abstract int min(int x, int y); //抽象方法,只有原型没有实现 int max(int x,int y){}; //非抽象方法,有原型有实现 } 抽象类可以被继承,其抽象方法被子类实现: 例2:子类继承抽象类并实现抽象方法 class B extends A //子类继承抽象类 { int min(int x, int y) { //子类实现了抽象方法,代码略 } } 子类实现了抽象方法,因此子类可以被实例化。 如果一个(非抽象类的)子类继承了抽象类, 则该子类必须实现抽象类的所有抽象方法。 语义: 在实际的软件开发中,抽象类主要用于规定系统顶层的核心设计概念,这些设计概念由具体的子类实现。 思考:(1)在日常生活中,抽象类—子类这种问题是否很多? (2)子类可以继承抽象类,也可以继承非抽象类,通常情况下,那种办法更好一些? 2 接口 语法: 使用关键字interface修饰的“类”叫接口(接口是一种特殊的类),接口中只能含有抽象方法(不需要abstract修饰)和常量。接口不能用new实例化。 接口是引用类型的。 示例3:声明一个接口 interface I //声明一个接口 { final int MAX=100; //接口只能有常量属性 int min(int x, int y); //接口只能有抽象方法 } 接口可以被子类继承(使用implements关键字),其抽象方法被子类实现: 示例4:子类继承接口并实现抽象方法 class C implements I //子类继承接口 { int min(int x, int y) { //子类实现了抽象方法,代码略} } 子类实现了接口的抽象方法,因此子类可以被实例化。 子类可以继承多个接口,比如有接口I1,I2,I3,则可以有: class C implements I1,I2,I3 此时,子类C应该实现上述3个接口的所有抽象方法。 语义: 在实际的软件开发中,接口的用途更加广泛,它主要用于划分各个子系统的边界,规定各个子系统的通信方式(合约或协议),接口由具体的子类方式实现。 思考:现实生活中,接口—子类这种问题是否很多? 3 接口和抽象类的主要异同: 语法的异同: 接口和抽象类的语法都比较简单。。。。。。 语义的异同: 接口和抽象类最重要的相同之处是:都用于表示抽象的设计概念,而将具体的实现留给子类。这在实际的大型软件开发中是非常重要的(在现实生活中也是常见的),接口和抽象类体现了软件设计与实现的分离、系统不易变化的部分(设计概念)和易变化的部分(具体实现)的分离。这不仅有利于产生构架灵活的、可维护性好的系统,满足“开闭原则”的要求,而且使软件开发人员分工明确,有利于外包等行业的发展,等等。 接口和抽象类最重要的不同之处是:从设计概念来说抽象类和子类应该是“子类in a kind of抽象类,并且实现了抽象类”的关系,而接口和子类则不必如此,接口和子类仅仅是“实现关系”即可。接口比抽象类更常用。 抽象类不允许多重继承(子类extends多个父类),而接口允许多继承(子类可以implements多个接口) 4 关键字final 有三种用法 (1)final修饰类的属性,表示一个常量,在课件第2章讲过,例如: class A {final int MAX=100; } (2)final修饰类的方法,表示该方法不能被子类覆盖(重写) 例如: public class F { int x=10; final void fun() //不能被子类覆盖 {System.out.println(F类的fun()被调用);} } class C extends F { void fun() { } //试图重写父类的 } (3)final修饰类,表示该类是最终类,不能被子类继承 例如: final public class F { } class C extends F //错 { } 本章习题 简答题 1 抽象类和接口语义上最主要的相同

您可能关注的文档

文档评论(0)

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

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

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档