You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java:如何将FurnitureItem子类Chair/Desk存入网格并实现对象引用?

用父类二维数组搞定你的家具网格存储问题

嘿,这个问题其实很好解决,核心就是利用Java的多态特性——既然Chair和Desk都继承自FurnitureItem,我们完全可以用父类类型的二维数组来存储这些子类对象,完美匹配你的网格需求!

第一步:创建匹配网格的二维数组

先根据你的网格尺寸,定义一个FurnitureItem类型的二维数组。比如假设你的网格是5行5列,就这么写:

// 5行5列的家具网格,用父类类型声明
FurnitureItem[][] furnitureGrid = new FurnitureItem[5][5];

第二步:把椅子/桌子存入网格

直接把Chair或Desk的实例丢进对应单元格就行,多态会自动帮你处理类型兼容:

// 在网格(0,0)位置放一把椅子
furnitureGrid[0][0] = new Chair();
// 在(2,3)位置放一张桌子
furnitureGrid[2][3] = new Desk();

第三步:引用单元格里的家具对象

情况1:调用父类通用方法

如果FurnitureItem里有子类重写的方法(比如你代码里的itemPrice()),直接调用就行,不用额外转换:

// 调用(0,0)位置家具的定价方法
furnitureGrid[0][0].itemPrice();

情况2:访问子类特有属性/方法

要是需要用到Chair的armRests或者Desk的width这类子类独有的东西,就先用instanceof判断类型,再强制转换:

// 检查(0,0)是不是椅子,是的话获取扶手状态
if (furnitureGrid[0][0] instanceof Chair) {
    Chair targetChair = (Chair) furnitureGrid[0][0];
    System.out.println("这把椅子有没有扶手:" + targetChair.armRests);
}

// 检查(2,3)是不是桌子,是的话获取宽度
if (furnitureGrid[2][3] instanceof Desk) {
    Desk targetDesk = (Desk) furnitureGrid[2][3];
    System.out.println("这张桌子的宽度是:" + targetDesk.width);
}

聊聊你之前的尝试为啥可能没成

  • 用集合的话其实也可行,比如ArrayList<ArrayList<FurnitureItem>>来模拟二维网格,但二维数组显然更贴合你要的网格结构,用起来更直观。
  • 如果之前用父类数组没成功,大概率是在取出对象时没正确处理类型转换,或者数组初始化的方式不对——比如不小心声明成了子类数组,那肯定存不了另一个子类的对象。

内容的提问来源于stack exchange,提问作者nev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:38:11