资源描述
《JAVA程序设计》课程实验报告
专 业: 网络工程
班 级: 1320552
学 号: 132055222
姓 名: 聂浩杰
日期: 2016 年 4 月 26 日
一、 实验题目
1. 类的继承与封装:
定义抽象类Shape(形状)其中有抽象方法用来求某形状的周长和面积;定义Shape类的子类Circle(圆形)、Triangle(三角形)、Rect(矩形)其中包括该形状的位置、大小信息并实现求其周长和面积的方法。
假设当前有圆心为(100,100)半径为60的圆,左上角坐标为(0,200),水平宽度为120,垂直高度为80的矩形,以及三个顶点坐标分别为(200,200)、(300,400)、(150,350)的三角形,请在控制台输出每个形状的相关信息,及所有形状的周长和面积的和。
2.接口的定义与实现:
通过接口和实现接口的类来完成上一题目。
二、 实验目的
1. 熟练掌握类、类的数据成员和成员方法的定义与实现;
2. 熟练掌握抽象类与类的继承的相关内容;
3. 熟练掌握接口与接口的实现的相关内容;
4. 熟练掌握public、private、static、final、abstract等修饰符的作用。
三、 实验内容
1. 复习有关Java中类、类的继承、接口、接口的实现的相关内容;
2. 根据题目要求编写需要的抽象类和其子类;
3. 根据题目要求编写相应的main方法完成程序;
4. 根据题目要求编写需要的接口和实现该接口的类;
5. 根据题目要求编写相应的main方法完成程序;
6. 调试代码,完善程序。
四、 实验步骤
1、 题目一
(1) 问题分析
首先应该建一个父类定义抽象类Shape,其中有抽象方法用来求某形状的周长和面积,然后定义Shape类的子类Circle(圆形)、Triangle(三角形)、Rect(矩形)其中包括该形状的位置、大小信息并实现求其周长和面积的方法。最后写一个测试类在里面建对象,调用各个子类方法,输出信息。
(2) 算法描述
父类Shape 抽象类方法area(),Perimeter( )。
子类Circle(圆形)、Triangle(三角形)、Rect(矩形)
里面具体写area(),Perimeter( )方法
测试类c5建立对象,调用子类里面的area(),Perimeter( )方法
用输出语句输出信息
(3) 主要代码及运行结果
抽象类Shape
package test2;
import java.awt.Graphics;
public abstract class Shape {
public int x,y;
public int w, g;
public Shape(int x, int y, int w, int g) {
super();
this.x = x;
this.y = y;
this.w = w;
this.g = g;
}
public abstract double area();
public abstract double zc();
}
Square类
public class Square extends Shape {
public Square(int x, int y, int w, int g) {
super(x, y, w, g);
// TODO 自动生成的构造函数存根
}
public double area() {
// TODO 自动生成的方法存根
return w*g;
}
public double zc() {
// TODO 自动生成的方法存根
return 2*(w+g);
}
Ciecle类
public class Circle extends Shape {
public double R;
public Circle(int x, int y, int w, int g) {
super(x, y, w, g);
// TODO 自动生成的构造函数存根
R=(double)w/2.0;
}
public double area() {
// TODO 自动生成的方法存根
return R*R*3.14;
}
public double zc() {
// TODO 自动生成的方法存根
return 2*R*3.14 ;
}
}
Triangle类
public class Triangle extends Shape {
public double c;
public Triangle(int x, int y, int w, int g) {
super(x, y, w, g);
// TODO 自动生成的构造函数存根
c=Math.sqrt(w*w+g*g);
}
public double area() {
// TODO 自动生成的方法存根
return 0.5*w*g;
}
public double zc() {
// TODO 自动生成的方法存根
return w+g+c;
}
}
测试类
import java.applet.Applet;
import java.awt.Graphics;
public class c5 extends Applet {
Square Box=new Square(30,230,120,80);
Triangle tri=new Triangle(5,50,8,4);
Circle Oval=new Circle(5,90,120,120);
public void paint(Graphics g) {
g.drawRect(Box.x,Box.y,Box.w,Box.g);
g.drawString("Box Area:"+Box.area(),40,330);
g.drawString("Box Perimeter:"+Box.zc(),40,350);
g.drawLine(200, 200, 300, 400);
g.drawLine(200, 200, 150, 350);
g.drawLine(300, 400, 150, 350);
g.drawString("tri Area:"+tri.area(),80,400);
g.drawString("tri Perimeter:"+tri.zc(),80,430);
g.drawString("Oval Area:"+Oval.area(),20,60);
g.drawString("Oval Perimeter:"+Oval.zc(),20,70);
g.drawOval(Oval.x,Oval.y,Oval.w,Oval.g);
}
}
(4) 出现问题及解决方法
在建子类时忘了写父类抽象方法的具体实现类,导致出现错误。
解决方法:只要在子类中该出父类中抽象类方法的实现方法,就可以在测试类中调用实现功能。
2、 题目二
(1) 问题分析
和上一个问题差不多,只是子类的功能要用接口来实现。
(2) 算法描述
接口Shape 抽象类方法area(),Perimeter( )。
类Circle(圆形)、Triangle(三角形)、Rect(矩形)
里面具体实现接口area(),Perimeter( )方法
测试类c5建立对象,调用子类里面的area(),Perimeter( )方法
用输出语句输出信息
(3) 主要代码及运行结果
import java.applet.Applet;
import java.awt.Graphics;
interface Shapes //定义一个接口
{
abstract double Area( ); //自动被定义为public abstract
double tPerimeter( ); //自动被定义为public abstract
}
其他Circle(圆形)、Triangle(三角形)、Rect(矩形)只要在类中定义局部变量和方法(和上一个一样),就可以了。
测试类
public class C5_18 extends Applet
{
Square Box=new Square(5,15,25,25);
Triangle tri=new Triangle(5,50,8,4);
Circle Oval=new Circle(5,90,25,25);
public void paint(Graphics g)
{
g.drawRect(Box.x,Box.y,Box.width,Box.height);
g.drawString(“Box Area:”+Box.getArea( ),50,35);
g.drawString(“Box Perimeter:”+Box.getPerimeter( ),50,55);
g.drawString(“tri Area:”+tri.getArea( ),50,75);
g.drawString(“tri Perimeter:”+tri.getPerimeter( ),50,95);
g.drawOval(Oval.x,Oval.y,Oval.width,Oval.height);
g.drawString(“oval Area:”+Oval.getArea( ),50,115);
}
}
(4) 出现问题及解决方法
在定义接口时,忘记是抽象类,给出了方法,所以出错。
解决方法:只在接口中给出抽象方法,具体方法在类中给出。
五、 体会与总结
通过这两个小程序,我熟练掌握类、类的数据成员和成员方法的定义与实现,熟练掌握抽象类与类的继承的相关内容;熟练掌握接口与接口的实现的相关内容;熟练掌握public、private、static、final、abstract等修饰符的作用。
4
展开阅读全文