第7章、类的封装、多态和继承

第7章、类的封装、多态和继承

ID:46376839

大小:367.00 KB

页数:47页

时间:2019-11-23

第7章、类的封装、多态和继承_第1页
第7章、类的封装、多态和继承_第2页
第7章、类的封装、多态和继承_第3页
第7章、类的封装、多态和继承_第4页
第7章、类的封装、多态和继承_第5页
资源描述:

《第7章、类的封装、多态和继承》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第7章类的封装、继承和多态7.1继承7.2多态封装的含义是把类设计成一个黑箱,使用者只能看见类中定义的公共方法,而看不到方法实现的细节,也不能直接对类的数据进行操作,迫使用户通过接口去访问数据,这种封装正是面向对象编程设计者追求的理想境界。相关数据和方法封装到一个包里,为程序员带来了两个好处:模块化和数据隐藏。模块化意味着对象源代码的编写和维护可以独立进行,不会影响到其他模块,而且有很好的重用性。数据隐藏则使对象有能力保护自己,对象提供一个公共接口和其他对象联系,自行维护自身的数据和方法而不影响所有依

2、赖于它的对象。封装新类可从现有的类中产生,将保留现有类的状态属性和方法并可根据需要加以修改。新类还可添加新的状态属性和方法,这些新增功能允许以统一的风格处理不同类型的数据。这种现象就称为类的继承。7.1类的继承当建立一个新类时,不必写出全部成员变量和成员方法。只要简单地声明这个类是从一个已定义的类继承下来的,就可以引用被继承类的全部成员。被继承的类称为父类或超类(superclass),这个新类称为子类。Java提供了一个庞大的类库让开发人员继承和使用。通常要对子类进行扩展,即添加新的属性和方法。这使

3、得子类要比父类大,但更具特殊性,代表着一组更具体的对象。继承的意义就在于此。7.1.1父类和子类在类的声明语句中加入extends关键字和指定的类名即可实现类的继承,例如:publicclassMyAppletextendsjava.applet.AppletpublicclassMyApplicationextendsFramepublicclassMyApp1extendsObjectpublicclassMyApp2那么,类的继承是从什么地方开始的?又是如何延续下来的呢?请看图7.1所示的模拟图

4、。图7.1反映了Java类的层次结构。最顶端的类是Object,它在java.lang中定义,是所有类的始祖。一个类可以有多个子类,也可以没有子类,但它必定有一个父类(Object除外)。Java中只允许单继承,即仅允许每个类有一个父类,不允许有多个父类,但一个类可以有多个子类。子类不能继承父类中的private成员,除此之外,其他所有的成员都可以通过继承变为子类的成员。另一方面,对继承的理解应该扩展到整个父类的分支,也就是说,子类继承的成员实际上是整个父系的所有成员。因此,可以得出如下结论:子类只能

5、有一个父类。如果省略了extends,子类的父类是Object。子类继承了父类和祖先的成员,可以使用这些成员。在需要的时候,子类可以添加新的成员变量和方法,也可以隐藏父类的成员变量或覆盖父类的成员方法。1.成员变量的继承例7.1下面的3个程序说明从点Point类扩展到线Line类和圆Circle类的方法,这是3个公共类,不能放在同一个文件中。它们都没有输出语句,即使补上相应的main()使之运行也看不到什么结果。publicclassPoint{protectedintx,y;Point(inta,i

6、ntb){setPoint(a,b);}publicvoidsetPoint(inta,intb){x=a;y=b;}publicintgetX(){returnx;}7.1.2成员变量的继承和隐藏publicintgetY(){returny;}}publicclassLineextendsPoint{protectedintx,y,endX,endY;Line(intx1,inty1,intx2,inty2){setLine(x1,y1,x2,y2);}publicvoidsetLine(intx

7、1,inty1,intx2,inty2){x=x1;y=y1;endX=x2;endY=y2;}publicintgetX(){returnx;}publicintgetY(){returny;}publicintgetEndX(){returnendX;}publicintgetEndY(){returnendY;}publicdoublelength(){returnMath.sqrt((endX-x)*(endX-x)+(endY-y)*(endY-y));}}publicclassCircle

8、extendsPoint{protectedintradius;Circle(inta,intb,intr){super(a,b);setRadius(r);}publicvoidsetRadius(intr){radius=r;}publicintgetRadius(){returnradius;}publicdoublearea(){return3.14159*radius*radius;}}上例中,Point类具备一个点的特征。Line和Circl

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。