【问题标题】:Creating an array of a parent class and adding child objects to it创建父类的数组并向其添加子对象
【发布时间】:2021-08-22 23:53:01
【问题描述】:

我是 Java 新手,我正在尝试编写一个命令行程序来计算各种结构梁的截面属性。父类Beam() 具有子类Angle()Tube()Rectangular()。我希望用户能够创建新的梁并将梁添加到父数组中,如下所示:

Beam[] beams = new Beam[10];
Tube tb = new Tube(width, height, weight);
Angle ag = new Angle(width, height, flangeWidth);

理想情况下,我想做这样的事情,但我不能,因为对象是不同的类型。

beams.add(tb);
beams.add(ag);

如何解决这个问题以跟踪子对象?我想打印数组中的所有对象,并让用户选择一个对象并打印出它的计算值。

【问题讨论】:

  • 如果你使用Arrays,你应该做类似beams[0] = tb; beams[1] = ag的事情吗?
  • 类名让我失望。 Angular/AngledTubularRectangularAngleTubeRectangle 会更加一致。
  • 我认为你需要继续阅读教程
  • 关于类名的好点;我肯定会改变它们以使它们更加一致。感谢您的评论。我在上 Java 101 课程,所以我还在学习。

标签: java arrays class object parent


【解决方案1】:

我认为最好为您的工作使用动态数组。不要在集合 API 中使用 Arrays 使用 ArrayList 类。

ArrayList< Beam > beams = new ArrayList <>;
beams.add( new Tube(width, height, weight) ) ;
beams.add( new Angle(width, height, flangeWidth) ) ;

由于您是 Java 新手,请仔细阅读集合 API,它将帮助您在编码时使用正确的数据结构。

【讨论】:

    【解决方案2】:

    数组没有add 方法。您必须将内容对象分配到特定的元素槽中。

    Beam[] beams = new Beam[10];
    beams[0] = new Tube(width, height, weight);
    beams[1] = new Angle(width, height, flangeWidth);
    

    更方便的是,使用List,例如ArrayList,而不仅仅是一个数组。

    List< Beam > beams = new ArrayList <> ( 10 ) ;
    beams.add( new Tube(width, height, weight) ) ;
    beams.add( new Angle(width, height, flangeWidth) ) ;
    

    正如所评论的,这是基本的 Java 101 内容。您应该花更多时间学习基础知识,例如 free tutorial online by Oracle,或者 Kathy Sierra 等人撰写的优秀但有些过时的书籍 Head First Java

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-09
      • 1970-01-01
      • 1970-01-01
      • 2010-10-12
      • 2020-10-15
      • 2015-11-17
      • 1970-01-01
      • 2023-03-05
      相关资源
      最近更新 更多