PTA-设计一个Shape及其子类Oval

编写一个完整的Java Application 程序。包含类Shape、类Oval、类ShapeTest,具体要求如下:
(1)编写一个抽象类Shape表示形状对象,包含以下成员
①属性:
PI:double型常数,值为3.1415926;
②方法:

  1. double area(), 抽象方法;
  2. double perimeter(),抽象方法;
    (2)编写一个Shape类的子类Oval,表示椭圆对象,包含以下成员
    ①属性:
  3. a:私有,double型,长轴半径;
  4. b:私有,double型,短轴半径;
    ②方法:
  5. Oval(double a,double b), 构造方法,用参数设置椭圆的长轴半径和短轴半径
  6. Oval(),构造方法,将椭圆的长轴半径和短轴半径都初始化为0。
  7. double area(),重写Shape类中的area方法,返回椭圆的面积( )
  8. double perimeter(),重写Shape类中的perimeter方法,返回椭圆的周长( )
  9. public String toString( ),将把当前椭圆对象的转换成字符串形式,例如长轴半径为10.0,短轴半径为5,返回字符串"Oval(a:10.0,b:5.0)"。
    (3)编写公共类Main,实现如下功能
  10. 输入长轴半径和短轴半径,并创建一个椭圆对象;
  11. 分别用area和perimeter方法,求出以上椭圆的面积和宽度并输出,输出过程中要求使用到toString方法,输出格式如下:

输入格式:

输入长轴半径和短轴半径

输出格式:

输出椭圆的面积和周长。

输入样例:

8 6

输出样例:

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

The area of Oval(a:8.0,b:6.0) is 150.79644480000002
The perimeterof Oval(a:8.0,b:6.0) is 44.42882862370954

Code:

import java.util.Scanner;
 abstract class Shape{
 double PI=3.1415926;
   abstract double area();
   abstract double perimeter();
}
class Oval extends Shape{
    private double a;
     private double b;
    //用参数设置椭圆的长轴半径和短轴半径
    Oval(double a,double b){
        this.a=a;
        this.b=b;
    }
    //长轴半径和短轴半径都初始化为0
    Oval(){
        a=0;
        b=0;
    }
    //重写Shape类中的area方法,返回椭圆的面积( )
    double area(){
      return PI*a*b;
    }
    //重写Shape类中的perimeter方法,返回椭圆的周长( )
    double perimeter(){
       return 2 * PI * Math.sqrt((a * a + b * b) / 2);
    }
    //把当前椭圆对象转换成字符串形式
    public String toString(){
            return "Oval(a:"+a+",b:"+b+")";
    }
}
public class Main{
    public  static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        double a=sc.nextDouble();
        double b=sc.nextDouble(); 
         Shape s=new Oval(a,b);
        System.out.println("The area of "+s.toString()+" is "+s.area());
        System.out.println("The perimeterof "+s.toString()+" is "+s.perimeter());
    }
}

  • 13
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Shape一个抽象,它的子类可以是各种形状,比如圆形、矩形等等。而OvalShape一个子类,表示椭圆形。在Oval中,我们可以定义椭圆的长轴和短轴,以及椭圆的位置等属性。同时,我们还可以重写Shape中的一些方法,比如计算面积和周长等。这样,我们就可以方便地创建各种不同形状的椭圆了。 ### 回答2: Shape一个基本的形状,它有一个虚拟方法draw(),用于绘制该形状。Shape子类Oval则表示圆形。 在设计Shape时,我们可以定义一个抽象基,其中包含一个虚拟方法draw()。这个draw()方法可以根据具体的形状进行实现,但是在Shape中无法实现具体的绘制逻辑。 ```python from abc import ABC, abstractmethod class Shape(ABC): @abstractmethod def draw(self): pass class Oval(Shape): def draw(self): print("绘制一个圆形") # 测试代码 oval = Oval() oval.draw() ``` 在子类Oval中,我们重写了父Shape中的draw()方法,实现了绘制一个圆形的功能。在实际的应用中,我们可以根据绘制的需求,再进一步扩展其他的形状子类。 ```python class Rectangle(Shape): def draw(self): print("绘制一个矩形") class Triangle(Shape): def draw(self): print("绘制一个三角形") # 测试代码 rectangle = Rectangle() triangle = Triangle() rectangle.draw() triangle.draw() ``` 通过创建Shape子类,我们可以实现多态性,即使用相同的方法名draw()来调用不同子类的绘制方法。这样可以方便地根据具体的形状要求来进行绘制。 ### 回答3: Shape一个表示形状的基,其子类oval是表示椭圆形状的派生Shape应该至少包含以下成员变量和方法: - 成员变量:color(形状的颜色)、filled(形状是否被填充) - 方法:构造方法(用于初始化颜色和填充)、getters和setters方法(用于获取和设置颜色和填充的值)、draw方法(用于在屏幕上绘制形状) ovalshape子类,表示一个椭圆形状。它应该继承shape的属性和方法,并添加一些额外的属性和方法来表示椭圆特有的属性。 oval应该至少包含以下成员变量和方法: - 额外的成员变量:radius1(表示椭圆主轴的一半长度)、radius2(表示椭圆次轴的一半长度) - 额外的方法:构造方法(用于初始化radius1和radius2的值)、getters和setters方法(用于获取和设置radius1和radius2的值) 通过以上的设计,可以创建一个表示形状的对象和一个表示椭圆的对象。利用对象的颜色、填充、半径等属性,可以将形状和椭圆绘制到屏幕上。 例如,可以创建一个椭圆对象并设置其颜色为红色、填充为true,接着调用draw方法将该椭圆绘制到屏幕上。 ```java Oval oval = new Oval(); oval.setColor("红色"); oval.setFilled(true); oval.setRadius1(4); oval.setRadius2(2); oval.draw(); ``` 以上就是设计一个Shape及其子类Oval的简要实现,能够满足基本的功能需求。根据实际情况和具体需求,可以根据需要增加或修改的属性和方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lsland..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值