实验中用两个包,第一个包含有一个接口,里面有计算体积的抽象方法calculateVolume,以及图形,形状的几个类,包含对应方法。另一个包引用第一个包,并构建第一个包中类的对象,在主方法中检测对象的方法正确性。**
注意点
1:子类继承父类时,父类含有有参构造方法,子类中必须对父类的构造方法重写
2 :静态方法中不能出现非静态变量,方法
- 设计一个应用程序要求:
(1)设计一个表示二维平面上点的类Point,包含有表示坐标位置的protected类型的成
员变量x和y,获取和设置x和y值的public方法。
(2)设计一个表示二维平面上圆的类Circle,它继承自类Point,还包含有表示圆半径
的protected,类型的成员变量r、获取和设置r值的public方法、计算圆面积的一public方法。
(3)设计一个表示圆柱体的类Cylinder,它继承自类Circle,还包含有表示圆柱体高的
protected类型的成员变量h、获取和设置h值的public方法、计算圆柱体体积的public方法。
(4)建立若干个Cylinder对象,输出其轴心位置坐标、半径、高及其体积的值。
要求:每个类包含无参数和有参数的构造方法。构造方法用于对成员变量初始化,无参数的构造方法将成员变量初始化为0值。子类的构造方法调用父类的构造方法,对父类中的成员变量初始化。- 定义一个接口,其中包含一个计算体积的抽象方法calculateVolume(),,设计circle和Rectangle两个类都实现接口中的方法calculateVolume(),分别计算球体和长方体的体积。
- 参考教材P133,示例程序C5_20,掌握包的使用方法。
package shape;
//构建接口
public interface Shapes {
//接口中的抽象方法
abstract double calculateVolume();
}
package shape;
//点类
public class Point extends Object{
protected double x = 0;
protected double y = 0;
//构造方法
public Point(double x,double y){
this.x = x;
this.y = y;
}
//返回坐标
public double get_X(){
return x;
}
public double get_Y(){
return y;
}
}
package shape;
//圆类 继承父类point且重写接口中的抽象方法
public class Circle extends Point implements Shapes{
protected double r = 0;
//重构方法 但是父类的构造方法需要重构
public Circle (double x,double y,double r){
super(x,y);//重构父类,但是x,y依然对应的point类的参数,构建Circle时,也隐藏式构建了x,y。
this.r = r;
}
//获取圆半径
public double get_r(){
return r;
}
//计算圆面积
public double Area_Circle(){
return (Math.PI*r*r);
}
//计算球体积
public double calculateVolume(){
return (3.0/4*Math.PI*r*r*r);
}
}
package shape;
//圆柱类
public class Cylinder extends Circle implements Shapes{
protected double h;
//圆柱的构造方法(包括构建其父亲circle的方法,使用super访问父亲)
public Cylinder(double x,double y,double r,double h){
super(x,y,r);
this.h = h;
}
//获取圆柱体的高
public double get_h(){
return h;
}
//计算圆柱体的体积
public double calculateVolume(){
return h*(Math.PI*r*r);
}
}
在测试包中的测试类中测试
注意:静态方法中不能出现非静态的方法,变量。
对象一定修饰成静态static
package shape_check;
//引入shape包中的内容
import shape.*;
public class check{
//建立圆的对象及圆柱体的对象
//******注意一定要将对象修饰为静态,否则main方法中报错(静态中不能出现非静态)***********
static Circle circle = new Circle(0,0,2);
static Cylinder cylinder = new Cylinder(1,1,5.1,4.1);
//开始check
public static void main(String[] args) {
System.out.println("***********************************************");
System.out.println("Circie的圆心坐标:("+circle.get_X()+" , "+circle.get_Y()+")");
System.out.println("Circle的半径:"+circle.get_r());
System.out.println("Circle的面积:"+circle.Area_Circle());
System.out.println("Circle对应球的体积:"+circle.calculateVolume());
System.out.println("***********************************************");
System.out.println("Cylinder的底面圆的圆心坐标:("+cylinder.get_X()+" , "+cylinder.get_Y()+")");
System.out.println("Cylinder的底面半径:"+cylinder.get_r());
System.out.println("Cylinder的底面面积"+cylinder.Area_Circle());
System.out.println("Cylinder的体积"+cylinder.calculateVolume());
}
}