1、实验名称:求柱体体积
2、实验目的:
理解并使用抽象类及抽象方法
理解并掌握向上转型实现多态
继续掌握引用类型的参数传值的过程及内存中的变化情况
熟练代码调试
实现求圆柱、方柱、三棱柱的体积
3、实验源代码:
Circle.java
public class Circle {
private double r;
public Circle(double r) {
if(r>0){
this.r = r;
}
else {
System.out.println("error!");
}
}
public double getArea() {
return Math.PI * r * r;
}
public void setR(double r) {
if(r>0){
this.r = r;
}
else {
System.out.println("error!");
}
}
}
Square.java
public class square {
private double a=0;
private double b=0;
private double c=0;
private double h=0;
public square(double a, double h) {
this.a = a;
this.h = h;
}
public square(double a, double b, double c) {
this.a = a;
this.b = b;
this.c = c;
}
public void setA(double a) {
if(a>0){
this.a = a;
}
else {
System.out.println("error!");
}
}
public void setB(double b) {
if(b>0){
this.b = b;
}
else {
System.out.println("error!");
}
}
public void setC(double c) {
if(c>0){
this.c = c;
}
else {
System.out.println("error!");
}
}
public void setH(double h) {
if(h>0){
this.h = h;
}
else {
System.out.println("error!");
}
}
public double getArea(){
if(h!=0&&b!=0){
System.out.println("error!");
return -1;
}
if(h!=0){
double s=a*h/2;
return s;
}
else {
double p=(a+b+c)/2;
double s=Math.sqrt(p*(p-a)*(p-b)*(p-c));
return s;
}
}
}
Rectangle.java
public class rectangle {
private double a;
private double b;
public rectangle(double a, double b) {
if(a>0&&b>0) {
this.a = a;
this.b = b;
}
else {
System.out.println("error!");
}
}
public void setA(double a) {
if(a>0) {
this.a = a;
}
else {
System.out.println("error!");
}
}
public void setB(double b) {
if(b>0){
this.b = b;
}
else {
System.out.println("error!");
}
}
public double getArea() {
return a*b;
}
}
Cuboid.java
package 作业.four;
public class cuboid extends rectangle{
private double h;
public cuboid(double a, double b,double h) {
super(a, b);
if(a>0&&b>0&&h>0) {
this.h = h;
}
else{
System.out.println("error!");
}
}
public void setR(double h) {
if(h>0) {
this.h = h;
}
else {
System.out.println("error!");
}
}
public double getArea() {
double s=super.getArea();
return s*h;
}
}
Cylinder.java
package 作业.four;
public class cylinder extends Circle{
private double h;
public cylinder(double r ,double h) {
super(r);
if(r>0&&h>0) {
this.h = h;
}
else{
System.out.println("error!");
}
}
public void setR(double h) {
if(h>0) {
this.h = h;
}
else {
System.out.println("error!");
}
}
public double getArea() {
double s=super.getArea();
return s*h;
}
}
Triangular_cylinder.java
public class Triangular_cylinder extends square{
private double h;
public Triangular_cylinder(double a, double h1, double h) {
super(a, h1);
if(a>0&&h1>0&&h>0) {
this.h = h;
}
else{
System.out.println("error!");
}
}
public Triangular_cylinder(double a, double b,double c, double h) {
super(a, b, c);
if(a>0&&b>0&&h>0) {
this.h = h;
}
else{
System.out.println("error!");
}
}
public void setR(double h) {
if(h>0) {
this.h = h;
}
else {
System.out.println("error!");
}
}
public double getArea() {
double s=super.getArea();
return s*h;
}
}
Demo.java
package 作业.four;
public class Demo {
public static void main(String[] args) {
cuboid V1=new cuboid(1,2,3);
cylinder V2=new cylinder(1,1);
Triangular_cylinder V3=new Triangular_cylinder(3,4,5,4);
System.out.println("立方体体积为:"+V1.getArea());
System.out.println("圆柱体体积为:"+V2.getArea());
System.out.println("三角柱体体积为:"+V3.getArea());
}
}
4、实验运行结果图:
5、实验总结:
设计了基础的三个二维图形界面,通过继承的方式去构建三维图像,最后通过Demo主函数进行调用(特殊:设计三角形时,数据进行了两种方式构建)



