题目的主要信息:

  • 图形类Shape,该类中定义了图形的周长属性,以及返回周长的方法,Area接口,该接口中定义了返回面积的方法getArea()
  • 定义一个圆形类Circle,使其继承于Shape,并实现Area接口
  • 定义一个正方形类Square,使其继承于Shape,并实现Area接口
  • 圆周率要使用Math类中的常量。

具体做法:

首先子类圆形和正方形的成员变量都应该和父类一样是周长,那么直接继承就可以,而父类的周长这个变量是private类型的,因此子类只能借助super通过父类的构造函数来实现构造初始化。

然后就是实现两个子类的Area接口,即在圆类中根据周长(LL)算半径(RR),再根据半径算面积(SS):

R=L/(2π)R=L / (2 * \pi)
S=πR2S=\pi R^2

在正方形类中根据周长(LL)算边长(XX),再根据半径算面积(SS):

X=L/4X=L/4
S=X2S=X^2

注意,子类中获取周长要调用父类的getS()方法才可以实现。

alt

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextDouble()) {
            double s = scanner.nextDouble();
            // Circle和Square是需要你定义的类
            System.out.println(String.format("%.3f",new Circle(s).getArea()));
            System.out.println(String.format("%.3f", new Square(s).getArea()));
        }
    }

}

class Shape {

    private double s; // 周长

    public Shape(double s) {
        this.s = s;
    }

    public double getS() {
        return s;
    }

}

interface Area {
    double getArea(); // 面积
}

// 圆形
class Circle extends Shape implements Area {
    public Circle(double s){ //调用父子初始化构造
        super(s);
    }
    
    public double getArea(){ //圆的面积
        double r = getS() / (2 * Math.PI); //求半径
        return Math.PI * r * r; //求面积
    }

}

// 方形
class Square extends Shape implements Area {
    public Square(double s){  //调用父子初始化构造
        super(s);
    }

    public double getArea(){ //正方形面积
        return (getS() / 4) * (getS() / 4); //边长的平方
    }
}

复杂度分析:

  • 时间复杂度:O(1)O(1),直接计算,常数时间
  • 空间复杂度:O(1)O(1),无额外空间