鱼C论坛

 找回密码
 立即注册
查看: 371|回复: 1

[已解决]java

[复制链接]
发表于 2024-10-10 22:35:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
定义一个抽象类Shape,类中封装属性name指定图形名称,定义用于求面积的抽象方法。定义3个子类:圆形类Circle、梯形类Trapezoid和三角形类Triangle,都继承Shape类,子类中各自新增属性,定义构造方法、设置属性值的方法并重写shape类中的方法。在Circle类和Triangle类中还新增求周长的方法。在主类中定义Shape类的对象,创建子类对象,设置其属性值,并输出其面积与周长,在程序中要体现上转型对象的使用。
最佳答案
2024-10-10 22:41:16
好的,我来帮助你实现这个需求。我们可以创建一个抽象类 `Shape`,以及相应的子类 `Circle`、`Trapezoid` 和 `Triangle`。其中,`Circle` 和 `Triangle` 类会增加求周长的方法。然后在主类中使用上转型来处理这些对象。下面是代码示例:

  1. // 定义抽象类 Shape
  2. abstract class Shape {
  3.     protected String name;

  4.     public Shape(String name) {
  5.         this.name = name;
  6.     }

  7.     // 抽象方法求面积
  8.     public abstract double getArea();

  9.     @Override
  10.     public String toString() {
  11.         return "Shape: " + name;
  12.     }
  13. }

  14. // 定义圆形类 Circle
  15. class Circle extends Shape {
  16.     private double radius;

  17.     public Circle(double radius) {
  18.         super("Circle");
  19.         this.radius = radius;
  20.     }

  21.     @Override
  22.     public double getArea() {
  23.         return Math.PI * radius * radius;
  24.     }

  25.     public double getPerimeter() {
  26.         return 2 * Math.PI * radius;
  27.     }
  28. }

  29. // 定义梯形类 Trapezoid
  30. class Trapezoid extends Shape {
  31.     private double base1, base2, height;

  32.     public Trapezoid(double base1, double base2, double height) {
  33.         super("Trapezoid");
  34.         this.base1 = base1;
  35.         this.base2 = base2;
  36.         this.height = height;
  37.     }

  38.     @Override
  39.     public double getArea() {
  40.         return 0.5 * (base1 + base2) * height;
  41.     }
  42. }

  43. // 定义三角形类 Triangle
  44. class Triangle extends Shape {
  45.     private double base, height, sideA, sideB, sideC;

  46.     public Triangle(double base, double height, double sideA, double sideB, double sideC) {
  47.         super("Triangle");
  48.         this.base = base;
  49.         this.height = height;
  50.         this.sideA = sideA;
  51.         this.sideB = sideB;
  52.         this.sideC = sideC;
  53.     }

  54.     @Override
  55.     public double getArea() {
  56.         return 0.5 * base * height;
  57.     }

  58.     public double getPerimeter() {
  59.         return sideA + sideB + sideC;
  60.     }
  61. }

  62. // 主类,定义主方法
  63. public class Main {
  64.     public static void main(String[] args) {
  65.         // 上转型创建 Circle 对象
  66.         Shape circle = new Circle(5);
  67.         System.out.println(circle.toString());
  68.         System.out.println("Area: " + circle.getArea());
  69.         // 向下转型以访问 Circle 的方法
  70.         System.out.println("Perimeter: " + ((Circle) circle).getPerimeter());

  71.         // 上转型创建 Trapezoid 对象
  72.         Shape trapezoid = new Trapezoid(3, 4, 5);
  73.         System.out.println(trapezoid.toString());
  74.         System.out.println("Area: " + trapezoid.getArea());

  75.         // 上转型创建 Triangle 对象
  76.         Shape triangle = new Triangle(3, 4, 3, 4, 5);
  77.         System.out.println(triangle.toString());
  78.         System.out.println("Area: " + triangle.getArea());
  79.         // 向下转型以访问 Triangle 的方法
  80.         System.out.println("Perimeter: " + ((Triangle) triangle).getPerimeter());
  81.     }
  82. }
复制代码


在这个例子中,为每个子类都提供了计算面积的方法,并在 `Circle` 和 `Triangle` 类中增加了计算周长的方法。在主类 `Main` 中,通过上转型的方式创建子类对象,并在需要时使用向下转型来调用特定子类的方法。如果有更多问题需要解答,请随时告知!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-10-10 22:41:16 | 显示全部楼层    本楼为最佳答案   
好的,我来帮助你实现这个需求。我们可以创建一个抽象类 `Shape`,以及相应的子类 `Circle`、`Trapezoid` 和 `Triangle`。其中,`Circle` 和 `Triangle` 类会增加求周长的方法。然后在主类中使用上转型来处理这些对象。下面是代码示例:

  1. // 定义抽象类 Shape
  2. abstract class Shape {
  3.     protected String name;

  4.     public Shape(String name) {
  5.         this.name = name;
  6.     }

  7.     // 抽象方法求面积
  8.     public abstract double getArea();

  9.     @Override
  10.     public String toString() {
  11.         return "Shape: " + name;
  12.     }
  13. }

  14. // 定义圆形类 Circle
  15. class Circle extends Shape {
  16.     private double radius;

  17.     public Circle(double radius) {
  18.         super("Circle");
  19.         this.radius = radius;
  20.     }

  21.     @Override
  22.     public double getArea() {
  23.         return Math.PI * radius * radius;
  24.     }

  25.     public double getPerimeter() {
  26.         return 2 * Math.PI * radius;
  27.     }
  28. }

  29. // 定义梯形类 Trapezoid
  30. class Trapezoid extends Shape {
  31.     private double base1, base2, height;

  32.     public Trapezoid(double base1, double base2, double height) {
  33.         super("Trapezoid");
  34.         this.base1 = base1;
  35.         this.base2 = base2;
  36.         this.height = height;
  37.     }

  38.     @Override
  39.     public double getArea() {
  40.         return 0.5 * (base1 + base2) * height;
  41.     }
  42. }

  43. // 定义三角形类 Triangle
  44. class Triangle extends Shape {
  45.     private double base, height, sideA, sideB, sideC;

  46.     public Triangle(double base, double height, double sideA, double sideB, double sideC) {
  47.         super("Triangle");
  48.         this.base = base;
  49.         this.height = height;
  50.         this.sideA = sideA;
  51.         this.sideB = sideB;
  52.         this.sideC = sideC;
  53.     }

  54.     @Override
  55.     public double getArea() {
  56.         return 0.5 * base * height;
  57.     }

  58.     public double getPerimeter() {
  59.         return sideA + sideB + sideC;
  60.     }
  61. }

  62. // 主类,定义主方法
  63. public class Main {
  64.     public static void main(String[] args) {
  65.         // 上转型创建 Circle 对象
  66.         Shape circle = new Circle(5);
  67.         System.out.println(circle.toString());
  68.         System.out.println("Area: " + circle.getArea());
  69.         // 向下转型以访问 Circle 的方法
  70.         System.out.println("Perimeter: " + ((Circle) circle).getPerimeter());

  71.         // 上转型创建 Trapezoid 对象
  72.         Shape trapezoid = new Trapezoid(3, 4, 5);
  73.         System.out.println(trapezoid.toString());
  74.         System.out.println("Area: " + trapezoid.getArea());

  75.         // 上转型创建 Triangle 对象
  76.         Shape triangle = new Triangle(3, 4, 3, 4, 5);
  77.         System.out.println(triangle.toString());
  78.         System.out.println("Area: " + triangle.getArea());
  79.         // 向下转型以访问 Triangle 的方法
  80.         System.out.println("Perimeter: " + ((Triangle) triangle).getPerimeter());
  81.     }
  82. }
复制代码


在这个例子中,为每个子类都提供了计算面积的方法,并在 `Circle` 和 `Triangle` 类中增加了计算周长的方法。在主类 `Main` 中,通过上转型的方式创建子类对象,并在需要时使用向下转型来调用特定子类的方法。如果有更多问题需要解答,请随时告知!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-26 12:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表