2.14 图形继承 (20分)

14 图形继承 (20分)
编写程序,实现图形类的继承,并定义相应类对象并进行测试。

类Shape,无属性,有一个返回0.0的求图形面积的公有方法public double getArea();//求图形面积
类Circle,继承自Shape,有一个私有实型的属性radius(半径),重写父类继承来的求面积方法,求圆的面积
类Rectangle,继承自Shape,有两个私有实型属性width和length,重写父类继承来的求面积方法,求矩形的面积
类Ball,继承自Circle,其属性从父类继承,重写父类求面积方法,求球表面积,此外,定义一求球体积的方法public double getVolume();//求球体积
类Box,继承自Rectangle,除从父类继承的属性外,再定义一个属性height,重写父类继承来的求面积方法,求立方体表面积,此外,定义一求立方体体积的方法public double getVolume();//求立方体体积
注意:
每个类均有构造方法,且构造方法内必须输出如下内容:Constructing 类名
每个类属性均为私有,且必须有getter和setter方法(可用Eclipse自动生成)
输出的数值均保留两位小数
主方法内,主要实现四个功能(1-4): 从键盘输入1,则定义圆类,从键盘输入圆的半径后,主要输出圆的面积; 从键盘输入2,则定义矩形类,从键盘输入矩形的宽和长后,主要输出矩形的面积; 从键盘输入3,则定义球类,从键盘输入球的半径后,主要输出球的表面积和体积; 从键盘输入4,则定义立方体类,从键盘输入立方体的宽、长和高度后,主要输出立方体的表面积和体积;

假如数据输入非法(包括圆、矩形、球及立方体对象的属性不大于0和输入选择值非1-4),系统输出Wrong Format

输入格式:
共四种合法输入

1 圆半径
2 矩形宽、长
3 球半径
4 立方体宽、长、高
输出格式:
按照以上需求提示依次输出

输入样例1:
在这里给出一组输入。例如:

1 1.0
输出样例1:
在这里给出相应的输出。例如:

Constructing Shape
Constructing Circle
Circle’s area:3.14
输入样例2:
在这里给出一组输入。例如:

4 3.6 2.1 0.01211
输出样例2:
在这里给出相应的输出。例如:

Constructing Shape
Constructing Rectangle
Constructing Box
Box’s surface area:15.26
Box’s volume:0.09
输入样例3:
在这里给出一组输入。例如:

2 -2.3 5.110
输出样例2:
在这里给出相应的输出。例如:

Wrong Format

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		int n=in.nextInt();
		switch(n) {
		case 1:
			double r;
			r=in.nextDouble();
			if(r<0) 
			{
				System.out.println("Wrong Format");
				
			}
			else
			{
				Circle a=new Circle() ;
				a.setRadius(r);
				System.out.printf("Circle's area:%.2f\n",a.getArea());
			}
			break;
		case 2:
			double a,b;
			a=in.nextDouble();
			b=in.nextDouble();
			if(a<=0||b<=0) {
				System.out.println("Wrong Format");
			}
			else 
			{
				Rectangle c=new Rectangle();
				c.setWidth(a);
				c.setLength(b);
				System.out.printf("Rectangle's area:%.2f\n",c.getArea());
			}
			break;
		case 3:
			double ra;
			ra=in.nextDouble();
			if(ra<=0)
			{
				System.out.println("Wrong Format");
			}
			else
			{
				Ball l=new Ball();
				l.setRadius(ra);
				System.out.printf("Ball's surface area:%.2f\n",l.getArea());
				System.out.printf("Ball's volume:%.2f\n",l.getVolume());
			}
			break;
		case 4:
			double e,f,g;
			e=in.nextDouble();
			f=in.nextDouble();
			g=in.nextDouble();
			if(e<=0||f<=0||g<=0) {
				System.out.println("Wrong Format");
			}
			else 
			{
				Box j=new Box();//怎么打印出三条语句的?
				                 //创建对象同时用了box这个无参构造方法
				j.setWidth(e);
				j.setLength(f);
				j.setHeight(g);
				System.out.printf("Box's surface area:%.2f\n",j.getArea());
                System.out.printf("Box's volume:%.2f\n",j.getVolume());
			}
			break;
		
		default :
			System.out.println("Wrong Format");
			
		}

	}

}
class Shape{
	public Shape() {
		System.out.println("Constructing Shape");
	}
	public double getArea() {
		return 0.0;
	}
}

class Circle extends Shape
{
	private double radius;
	public Circle()
	{
		System.out.println("Constructing Circle");
	}
	
	public double getArea()
	{
		return Math.PI*radius*radius;
	}
	
	public double getRadius() {
		return radius;
	}
	public void setRadius(double radius) {
		this.radius = radius;
	}
	
}

class Rectangle extends Shape{
	public  Rectangle()
	{
		System.out.println("Constructing Rectangle");
	}
	private double width;
	private double length;
	
	public double getArea() {
		return width*length;
	}
	public double getWidth() {
		return width;
	}
	public void setWidth(double width) {
		this.width = width;
	}
	public double getLength() {
		return length;
	}
	public void setLength(double length) {
		this.length = length;
	}
	
}
class Ball extends Circle{//球继承圆
	public  Ball()
	{
		System.out.println("Constructing Ball");
	}
	
	public double getArea() {
		return 4*super.getArea();
	}
    
	public double getVolume() {
		double l=getRadius();//在外面不用定义半径,因为父类有,只需要用
		return Math.PI*l*l*l*4/3.0;
	}
	
	
}
class Box extends Rectangle{
	public  Box()
	{
		System.out.println("Constructing Box");
	}
	private double height;
	public double getVolume() {
		return super.getArea()*height;//父类的面积
	}
	public double getHeight() {
		return height;
	}
	public void setHeight(double height) {
		this.height = height;
	}
	public double getArea() {
		double l=getWidth();
		double j=getLength();
		return (l*j*2+j*height*2+l*height*2);
	}
	
}

### 回答1: smcdraw2.14是一种数字化的绘图软件,它具有各种绘图功能和工具,可以帮助用户轻松进行图形设计和绘制。smcdraw2.14具有简洁易用的界面,适合初学者和专业设计师使用。 首先,smcdraw2.14具有丰富的绘图功能,用户可以使用各种形状和线条工具创建各种图形,如矩形、圆形、箭头等。同时,它还提供了丰富的颜色、线型和填充选项,使用户能够根据自己的需求进行个性化的设计。 其次,smcdraw2.14还具有强大的编辑功能。用户可以调整图形的大小、位置和旋转角度,还可以改变图形的颜色和透明度。此外,smcdraw2.14还提供了各种绘制和编辑工具,如剪切、复制、粘贴、重排等,方便用户对绘图进行修改和操作。 此外,smcdraw2.14还支持导入和导出多种文件格式,用户可以将绘制的图形保存为常见的图像格式,如PNG、JPG等,以便后续使用。同时,用户还可以将已有的图像导入到smcdraw2.14进行编辑和修改。 最后,smcdraw2.14还具有实用的辅助工具,如标尺和网格线,可以帮助用户更精确地进行绘图。此外,该软件还支持撤销和重做功能,用户可以轻松地回到先前的操作步骤。 总之,smcdraw2.14是一款功能强大、操作简便的数字化绘图软件,它适用于各用户,无论是初学者还是专业设计师,都可以通过smcdraw2.14实现高质量的绘图和设计。 ### 回答2: smcdraw2.14一个特定的名词或短语,无法明确其含义和提供具体回答。请提供更多相关信息或背景,以便我可以为您提供更有针对性的答案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值