题目的主要信息:
- 图形类Shape,该类中定义了图形的周长属性,以及返回周长的方法,Area接口,该接口中定义了返回面积的方法getArea()
- 定义一个圆形类Circle,使其继承于Shape,并实现Area接口
- 定义一个正方形类Square,使其继承于Shape,并实现Area接口
- 圆周率要使用Math类中的常量。
具体做法:
首先子类圆形和正方形的成员变量都应该和父类一样是周长,那么直接继承就可以,而父类的周长这个变量是private类型的,因此子类只能借助super通过父类的构造函数来实现构造初始化。
然后就是实现两个子类的Area接口,即在圆类中根据周长()算半径(),再根据半径算面积():
在正方形类中根据周长()算边长(),再根据半径算面积():
注意,子类中获取周长要调用父类的getS()方法才可以实现。
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); //边长的平方
}
}
复杂度分析:
- 时间复杂度:,直接计算,常数时间
- 空间复杂度:,无额外空间