- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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 抽象类和接口语义上最主要的相同
您可能关注的文档
- analysis of western medicine failed prescription of the emergency door(西医没有处方的分析应急门).doc
- analysis of why the rise in the amount included in the reasons for the decline in ranking(分析的原因包括数量的增加在排名下降的原因).doc
- analysis of wireless sensor networks used in the feasibility analysis of substation(分析无线传感器网络应用于变电站的可行性分析).doc
- analysis of wireless sensor networks for wlan gateway and access mechanisms(分析wlan的无线传感器网络网关和访问机制).doc
- analysis of wuthering heights of the narrative features(分析《呼啸山庄》的叙事特征).doc
- analysis of xi'an the louguantai tourist attraction and factors influencing(法融分析西安楼观台旅游景点和影响因素).doc
- analysis of x-ray findings are not typical of tuberculosis misdiagnosed(x射线分析发现不典型肺结核误诊).doc
- analysis of wuthering heights(分析《呼啸山庄》).doc
- analysis of yan yuan concept of adult education practice and innovation in zhangnan college(分析颜元zhangnan学院成人教育实践和创新的概念).doc
- analysis of young people on career exploration of influencing factors and social support system construction(年轻人在职业生涯的分析探索影响因素和社会支持系统的建设).doc
文档评论(0)