java - 如何访问位于父类(super class)数组中的另一个对象内部的对象数组?

标签 java arrays casting object

我有一个抽象类 Employee,并基于它创建了以下子类:

全职员工
兼职员工
推销员

以及一个独立的类,Orders

我使用 Orders 类通过在 Salesman 构造函数中发送一组订单来“描述销售员”:

public Salesman(String firstname, String lastname,int code, String address,
                String city,int tk,int phone,String email,int deptcode,int card,
                double hours,String cat,int orderno,double salary,
                Orders[] order){
 super(  firstname, lastname, code,  address, city, tk, phone, email, deptcode,
         card, hours, cat );
 this.orderno=orderno;
 
 setBaseSalary( salary );
 getSalary(orders);
 /////////////////

 }

稍后,我使用该数组来计算销售员获得的奖金,具体取决于他的销售量。

main 中,我创建了一个 Employee 类型的数组:

Employee employees[] = new Employee[ 7 ];
   employees[ 0 ] = salary1;
   employees[ 1 ] = salary2;
   employees[ 2 ] = salary3;
   employees[ 3 ] = partt1;
   employees[ 4 ] = partt2;
   employees[ 5 ] = sales1;
   employees[ 6 ] = sales;

其中每一行是不同类型的员工(薪水 = 全职,partt = 兼职,sales = 销售员)。

我的问题是我想使用 employees 数组打印每个销售员的订单。 到目前为止我所做的是

for (int i=5;i<employees.length;i++){
              System.out.printf("Orders of Salesman: %S %S",
                  employees[i].getName(),employees[i].getSurname());
              System.out.printf(" Total amount(money) from orders: %,.0f ",
                  employees[i].earnings());
              int j=0;
              ((Salesman)employees[i]).getOrderNo(arr) ;
              //((Orders)employees[i]).getOrderNo();
              System.out.printf("ordernumber: %d  orderdate:%s  description: %s
                  order amount(money): %,.0f\n ");
                 
           }

问题来了:

System.out.printf("ordernumber: %d orderdate:%s description: %s order amount(money): %,.0f\n ");

如何访问员工数组中 Salesman 对象中的订单数组? 我试过强制转换,但它不起作用,因为 Orders 不是 Employee 的子类。

我需要它来打印,例如,

Orders of Salesman: john koun

Total amount of orders: 13000 Orders per Salesman

Order number: 1 order date: 10/2/2010 description: machinery sale order amount: 12000

Order number: 2 order date: 20/2/2010 description: sales of parts order amount: 1000

最佳答案

您的 Salesman 构造函数接受 Order[] 订单,但看起来您没有在任何地方保留对它的引用(除非您在 getSalary 中这样做 或注释掉的部分)。

你需要添加类似的内容

this.orders = 订单;

在您的 Salesman 构造函数中,因此您可以将该数组作为 Salesman 对象的字段/属性进行引用。

通常您应该使用 Bean 模式,其中每个字段都有一个 getter/setter 方法:

public Order[] getOrders(){
    return orders;
}

public void setOrders(Order[] orders){
    this.orders=orders;
}

然后在您的构造函数中添加 setOrders(orders);

然后在您的调试/输出代码中添加:

Salesman salesman = (Salesman) employees[i];
for (Order order : salesman.getOrders())
    System.out.println(order); // i don't know what fields order has!

关于java - 如何访问位于父类(super class)数组中的另一个对象内部的对象数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4249982/

相关文章:

java - getDeclaredConstructor 找不到以接口(interface)作为参数的构造函数

java - Java 中的 HashMap

python - NumPy - 删除包含相同元素的子数组

java - 在 thymeleaf 前端中将 int 转换为 float

c - 整数提升和无符号解释

ios - float 到整数的转换

java - 从 String 中删除不适合 UTF-8 编码的字符

java - JTextArea setText() & UndoManager

Java 加密 Cast-256

c++ - 使用 memcpy 提高数组中随机插入的性能