java简明教程 chap8

java简明教程 chap8

ID:14316827

大小:60.50 KB

页数:25页

时间:2018-07-27

java简明教程 chap8_第1页
java简明教程 chap8_第2页
java简明教程 chap8_第3页
java简明教程 chap8_第4页
java简明教程 chap8_第5页
资源描述:

《java简明教程 chap8》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、JAVA简明教程chap8第八章抽象类、接口和包8.1抽象类和抽象方法假如我们需要使用多种几何图形如圆、矩形和三角形等,其中要包括计算面积的方法area。我们已经有了一个名为shape的类,创建矩形和三角形等具体形状类时可以继承shape类。我们可以在shape类中统一声明一个area方法。但对于抽象的形状,area方法不需要具体的计算。而对于各个子类,计算area的方法不同。这时。我们可以把shape类中的area方法定义为抽象的,而在不同的子类中定义area方法的不同实现。包含一个或多个抽象方法的类必须被声明为抽象的。声明抽象方法和抽象类只要在声明时的类名和方法名前加修饰符abstract

2、即可。抽象方法的声明中不包含方法体,因为具体的实现是在子类中进行的,这属于方法(在子类中)的重载。你不能为抽象类定义构建器,也不能用new运算符为抽象类生成一个对象句柄。从抽象类继承而派生的子类如果不再定义为抽象的,那就必须对其超类的所有抽象方法给出具体实现。例1本例程说明抽象类和抽象方法的声明。/////父类Shape类的声明abstractclassShape{publicfinaldoublePI=3.14;//构建器publicShape(){System.out.println("Ashapewascreated.");}voiddraw(){System.out.println("

3、Drawashape");}//抽象方法areaabstractdoublearea();}//子类Circle的声明classCircleextendsShape{intcenterX;//圆心X坐标intcenterY;//圆心Y坐标intradius;//圆的半径//构建器publicCircle(){super();//使用父类的构建器构建父类}publicCircle(intx,inty,intr){super();//使用父类的构建器构建父类centerX=x;centerY=y;radius=r;}publicvoiddraw(){System.out.println("draw

4、acircle");}publicdoublearea(){return(PI*radius*radius);}}//子类Rectangle声明classRectangleextendsShape{intleft;//矩形左上角X坐标inttop;//矩形左上角Y坐标intwidth;//矩形长度intheight;//矩形宽度//构建器publicRectangle(){super();//使用父类的构建器构建父类}publicRectangle(intl,intt,intw,inth){super();left=l;top=t;width=w;height=h;}publicdoublea

5、rea(){return(width*height);}}publicclassAbstract{publicstaticvoidmain(Stringargs[]){ShapeRectangle=newRectangle(0,0,40,30);System.out.println(Rectangle.area());Rectangle.draw();Shapeshape1=newCircle(120,130,50);System.out.println(shape1.area());shape1.draw();//Shapeshape2=newShape();//Shape是抽象的;不能被实

6、例化}}///运行结果:Ashapewascreated.1200.0DrawashapeAshapewascreated.7850.0drawacircle从程序的代码和运行结果中我们可以看到以下几点。父类Shape中的draw方法不是抽象的,在子类Circle中作了重载,而在Rectangle中没有重载。第三行调用Rectangle.draw()方法,结果调用了父类的draw()方法。这说明在子类中如果不重载就继承父类中的方法。第四行创建了Shape类型的对象却用了子类的构建器,这是允许的,并且实际上创建了一个Circle的实例。在第六行调用shape1.draw()时,虽然句柄是Shap

7、e类型,但实际调用的是Circle的draw(),故输出“drawacircle”。最后一行被注释掉的代码如果编译,就会发生“Shape是抽象的;不能被实例化”的错误。8.2接口假如Shape类是现有的并且不包含抽象方法area,但是由于其它需要我们必须通过继承Shape来建立新类,那么有没有办法为某一系列的类提供通用的抽象方法呢?因为Java摒弃了多重继承,我们不能用继承多个类来获得更多的方法。

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

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

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