package challenge; import basic.Shape; import advanced.Resizable; /** * 椭圆形类,实现Shape接口和Resizable接口 */ public class Ellipse implements Shape, Resizable { private String color; private double semiMajorAxis; // 长半轴 private double semiMinorAxis; // 短半轴 /** * 构造方法 * @param color 椭圆形的颜色 * @param semiMajorAxis 长半轴 * @param semiMinorAxis 短半轴 */ public Ellipse(String color, double semiMajorAxis, double semiMinorAxis) { this.color = color; this.semiMajorAxis = Math.max(semiMajorAxis, semiMinorAxis); // 确保长半轴不小于短半轴 this.semiMinorAxis = Math.min(semiMajorAxis, semiMinorAxis); } @Override public String getColor() { return color; } @Override public double getArea() { return Math.PI * semiMajorAxis * semiMinorAxis; } @Override public void display() { System.out.println("Ellipse [color=" + color + ", semiMajorAxis=" + semiMajorAxis + ", semiMinorAxis=" + semiMinorAxis + ", area=" + getArea() + "]"); } @Override public void enlarge(double factor) { if (factor > 0) { this.semiMajorAxis *= factor; this.semiMinorAxis *= factor; } } @Override public void shrink(double factor) { if (factor > 0 && factor < 1) { this.semiMajorAxis *= factor; this.semiMinorAxis *= factor; } } @Override public String getSizeInfo() { return "Ellipse with semi-major axis: " + semiMajorAxis + ", semi-minor axis: " + semiMinorAxis + ", area: " + getArea(); } /** * 获取长半轴 * @return 长半轴 */ public double getSemiMajorAxis() { return semiMajorAxis; } /** * 设置长半轴 * @param semiMajorAxis 新的长半轴 */ public void setSemiMajorAxis(double semiMajorAxis) { this.semiMajorAxis = semiMajorAxis; } /** * 获取短半轴 * @return 短半轴 */ public double getSemiMinorAxis() { return semiMinorAxis; } /** * 设置短半轴 * @param semiMinorAxis 新的短半轴 */ public void setSemiMinorAxis(double semiMinorAxis) { this.semiMinorAxis = semiMinorAxis; } /** * 设置颜色 * @param color 新的颜色 */ public void setColor(String color) { this.color = color; } }