北京信息科技大学Java语言程序设计-抽象类和接口

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验4抽象类与接口
【实验宗旨】
每天做一点编程练习。

【实验目得】
1、学习与掌握Java抽象类得定义与使用.
2、学习与掌握Java接口得定义与使用。

3、进一步学习与掌握通用程序设计方法。

【实验步骤(解题过程)】
参见实验2.
【实验内容】
1、(pareableCirlce类)创建名为pareableCircle类,它扩展Cir cle类并实现pareable接口。

画出UML图,实现pareTo方法,使其可以根据面积比较两个圆。

编写一个测试程序求出pareableCircle对象得两个实例中得较大者。

说明:⑴来源编程练习14、2(P399))。

⑵java、lang、pareable接口参见14、5小节(P378).⑶Circle类得实现,参见程序清单11、2(P303)。

【实验预习】
1.问题描述:该题描述得就是创建一个pareableCircle类来实现两个圆得
比较.
2.创建两个pareableCircle类得实例,利用parable接口,并调用p
arableMax方法实现。

【附程序代码】
SuppressWarnings(”unchecked")
public class testpareableCircle{
//主方法
ﻩpublic static void main(String[]args){
ﻩﻩpareableCircle C1=new pareableCircle(10);
ﻩpareableCircle C2=newpareableCircle(3);
ﻩﻩSystem、out、println("The maxnium Circle is "+parableMax(C 1,C2)+"得圆");
ﻩ}
//比较两个圆得大小
publicstaticparable parableMax(parableC1,parable C2)
ﻩ{
ﻩﻩif(C1、pareTo(C2)>0)
ﻩﻩreturn C1;
ﻩﻩelse return C2;

}
public class pareableCircle extends Circle implementsparable{
ﻩ//建立个指定半径得圆
pareableCircle(double radius){
ﻩsuper(radius);
}
//parable接口得方法
public int pareTo(Object o){
ﻩif(getArea()〉((pareableCircle)o)、getArea())
ﻩreturn 1;
ﻩelse if(getArea()<((pareableCircle)o)、getArea())return -1;
else return 0;

ﻩ}
public class Circle extends GeometricObject1 { private double radius;
public Circle() {

public Circle(double radius) {
this、radius = radius;
}
//返回半径
public double getRadius(){
return radius;

//设置一个新得半径
public void setRadius(double radius) {
this、radius = radius;
}
//返回圆得面积
publicdouble getArea(){
return radius * radius * Math、PI;

//返回圆得直径
public double getDiameter() {
return2*radius;

//返回圆得周长
public double getPerimeter() {
return 2* radius * Math、PI;

//打印圆得信息
public String toString() {
return "created in”+getDateCreated() + " andthe radius is " + radius;
}

【Uml图】
CompareableCircle
<<create>>~CompareableCircle(radius: double)
+compareTo(o: Object): int
【实验过程及运行结果】
在运行过程中遇到得错误就是,在写parableMax方法时,我写得返回值就是parableCircle类型。

应该返回值得类型就是parable类型。

这样直接调用了它得ToString方法. 2、(将Circle类变成可比较得)改写程序清单11-2(P303)中得Circle 类,它扩展G eometricObject类(程序清单14—1(P371)),
并实现pareable接口。

覆盖Object类中得equals方法。

当两个Circle对象所表示得圆得半径相等时,则这两个对象就是相同得。

画出包括Circle、Geom etricObject与pareble得UML图.编写测试程序,判断两个圆就是否相同。

如果不同,按照练习1得思路,比较两个圆对象得大小.(来源:编程练习14、5(P399))。

【实验预习】
1.问题描述:创建Circle类,比较两个圆得大小。

2.创建两个Circle类得实例,调用pareTo方法与equals方法,比较两个圆
得大小。

【附程序代码】
public classtestCircle2{
public static void main(String[]args){
ﻩCircle1C1=new Circle1(2);//建立一个半径为2得圆
Circle1 C2=newCircle1(3);//建立一个半径为3得圆
ﻩﻩSystem、out、println(C1、equals(C2));
ﻩSystem、out、println(C1、pareTo(C2);


public class Circle1 extends GeometricObject implements parable{
private doubleradius;
public Circle1() {

public Circle1(doubleradius){
this、radius = radius;
}
//返回半径
public double getRadius() {
returnradius;

//设置一个新得半径
public void setRadius(double radius) {
this、radius = radius;

//返回圆得面积
publicdoublegetArea() {
return radius * radius * Math、PI;
}
//返回圆得直径
public double getDiameter(){
return 2 * radius;

//返回圆得周长
public double getPerimeter() {
return 2 * radius *Math、PI;
}
//打印圆得信息
public String toString(){
return "created in" + getDateCreated()+” andthe radius is ” + radius;
}
//parable接口得方法
public int pareTo(Object o){
if(this、getArea() > ((Circle1)o)、getArea()) return1;
else if (this、getArea() <((Circle1)o)、getArea()) return -1;
else
return 0;

//覆盖Object中得equals方法
public boolean equals(Object o) {
return this、getArea()== ((Circle1)o)、getArea(); }
}
【UML图】
【实验过程与运行结果】
在实验过程中,不会编写equals得覆盖方法.
解决方法:应该就是写成; public boolean equals(Object o) { return this、getArea() == ((Circle1)o)、getArea();}3、(求几何对象得面积之与)编写一个方法,求数组中所有几何对象得面积之与。

方法签名如下:
public static double sumArea(GeometricObject[] a)
编写测试程序,创建4个对象(两个圆形与两个矩形)得数组,然后使用sumArea 方法求它们得总面积。

说明:⑴来源:编程练习14、8(P400);⑵分别实现Geometric Object 类(程序清单14-1(P372))、Rectangle类(程序清单11-3(P305))与Circle类(程序清单11-2(P303));⑶建立GeometricObject类层次结构(图14-2(P372))。

【附程序代码】
public class Area{
public static void main(String[] args){
new Area();

publicArea(){
GeometricObject[]a = {new Circle(5), new Circle(6), new Rectangle(2, 3), new Rectangle(2, 3)};
System、out、println("The total area is " +sumArea(a));
}
public static double sumArea(GeometricObject[]a){ double sum = 0;
for (int i = 0;i< a、length; i++)
sum += a[i]、getArea();
return sum;

//矩形类
class Rectangle extends GeometricObject {
privatedouble width;
private doubleheight;
//创建一个指定长与宽得矩形
public Rectangle(double width,double height){this、width= width;
this、height = height;
}
//返回矩形得宽
public doublegetWidth() {
return width;
}
//设定矩形得宽
public void setWidth(doublewidth){
this、width = width;

//返回举矩形得高
public double getHeight() {
return height;

//设定矩形得高
public void setHeight(double height) {
this、height = height;

//返回矩形面积
public double getArea() {
return width*height;
}
//求矩形得周长
public double getPerimeter() {
return 2*(width + height);

//覆盖equals方法
public booleanequals(Rectangle rectangle) {
return (width == rectangle、getWidth()) &&
(height == rectangle、getHeight());
}
//返回基本信息
public String toString() {
return "[Rectangle] width = " + width +
" and height =" + height;
}

}
【运行结果】
【思考题】
1、练习1与练习2中,使用了不同得方法建立了可比较得Circle类。

结合编程实现,说说您对不同设计方案得想法与体会。

利用不同得设计方案可易于解决不同得实际问题.
2、练习3中,如果将方法sumArea得参数数组定义为Cirlce[],可以实现相应得功能吗?定义为Object[]呢?为什么?结合本题,说说您对通用程序设计得理解.
前者不可以,后者可以。

编程就就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果得过程。

为了使计算机能够理解人得意图,人类就必须要将需解决得问题得思路、方法、与手段通过计算机能够理解得形式告诉计算机,使得计算机能够根据人得指令一步一步去工作,完成某种特定得任务。

3、说说抽象类与接口得相同与不同之处。

、ﻩ相同点
都不能被直接实例化,都可以通过继承实现其抽象方法。

都就是面向抽象编程得技术基础,实现了诸多得设计模式。

不同点
接口支持多继承;抽象类不能实现多继承。

接口只能定义抽象规则;抽象类既可以定义规则,还可能提供已实现得成员。

接口就是一组行为规范;抽象类就是一个不完全得类,着重族得概念。

接口可以用于支持回调;抽象类不能实现回调,因为继承不支持。

接口只包含方法、属性、索引器、事件得签名,但不能定义字段与包含实现得方法;抽象类可以定义字段、属性、包含有实现得方法。

接口可以作用于值类型与引用类型;抽象类只能作用于引用类型。

例如,Struct就可以继承接口,而不能继承类。

相关文档
最新文档