欢迎来到天天文库
浏览记录
ID:42055743
大小:1.28 MB
页数:83页
时间:2019-09-07
《抽象类与接口Java》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第6章抽象类与接口讲师:2009-06-08目标当完成本章后,你应该能够:理解抽象方法理解抽象类从抽象类继承理解并使用接口实现接口从接口继承抽象类从形状开始抽象方法抽象类从形状开始要开发一个图形系统首先要定义相关的图形类主要有:三角形平行四边形矩形正方形……父类根据继承的知识以及形状之间的关系设计了所有形状类的父类类Shape该类的方法在继承时需要被覆盖Shape.java父类Shape未定义成员变量成员方法如下:publicShape();publicdoublegetPerimeter();publ
2、icdoublegetArea();publicvoiddraw();周长和面积这是任何形状都有的属性返回类型是double由于Shape是所有形状的父类并不是具体的形状那么这两个方法的方法体能否为空呢?答案是不能为空因为方法的返回类型是double这两个方法必须返回一个double类型的值否则产生编译错误,不能通过编译编译错误把两句return0.0;注释后重新编译程序srcShape.java:9:缺少返回语句}^srcShape.java:13:缺少返回语句}^2错误子类Triangle设计并
3、实现子类三角形TriangleTriangle.java成员:privatedoublea;privatedoubleb;privatedoublec;publicTriangle();publicTriangle(doublea,doubleb,doublec);publicdoublegetPerimeter();publicdoublegetArea();publicvoiddraw();子类parallelogram设计并实现子类平行四边形parallelogramParallelogram.j
4、ava成员:privatedoublea;privatedoubleb;privatedoubletheta;publicParallelogram();publicParallelogram(doublea,doubleb,doubletheta);publicdoublegetA();publicdoublegetB();publicdoublegetPerimeter();publicdoublegetArea();publicvoiddraw();Math.sin(theta)小问题但影响最终计
5、算结果经常使用角度但该方法使用的是弧度角度转换为弧度子类Rectangle设计并实现子类矩形rectangleRectangle.java该类从Parallelogram而非Shape进行继承成员:publicRectangle();publicRectangle(doublea,doubleb);publicvoiddraw();子类Rectangle构造器的编写通过super来调用父类的构造器角度的赋值计算周长和面积通过构造器已经完成了成员变量的赋值因此该类不需要覆盖父类的这两个方法子类Square
6、设计并实现子类正方形squareSquare.java该类从Rectangle进行继承成员:publicSquare();publicSquare(doublea);publicvoiddraw();子类Square构造器的写法与其父类Rectangle类似该类不需要覆盖计算周长和面积的方法类图可能的副作用成员的继承包括成员变量和成员方法父类的修改对于子类的影响子类对于父类有较强的依赖性耦合,coupling原则:低耦合,高内聚分析父类Shape两个方法的方法体没有任何实际意义但是为了编译能够通过不能删
7、去返回语句可是返回的值又没有任何实际意义两难境地Whatcanwedo?解决办法可以告诉编译器压根儿就没想实现这两个方法因为即使定义了方法体也没有任何实际用处那还不如根本就别定义方法体不想实现的方法只有方法头部,没有方法体抽象方法抽象方法不需要实现的方法之后方法的头部没有方法体用分号;代替正常的一对大括号{}语法:publicdoublegetPerimeter();publicdoublegetArea();重新编译Shape.java编译错误srccnpetershapeShape.java
8、:9:缺少方法主体,或声明抽象publicdoublegetPerimeter();^srccnpetershapeShape.java:11:缺少方法主体,或声明抽象publicdoublegetArea();^2错误抽象方法必须把方法声明为抽象的使用Java语言的关键字abstract改成如下形式:publicabstractdoublegetPerimeter();publicabstractdoublegetArea();p
此文档下载收益归作者所有