如何访问位于超类数组内的另一个对象内部的对象数组?

时间:2010-11-22 20:33:42

标签: java arrays casting object

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

FulltimeEmployee
PartTimeEmployee
Salesman

以及一个独立的课程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 =兼职,销售=销售员)。

我的问题是我想使用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 ");

如何访问employees数组上Salesman对象内的orders数组? 我尝试过转换,但它不起作用,因为Orders不是Employee的子类。

我需要它来打印,例如,

  

推销员订单:john koun

     

订单总数:13000   每个销售员的订单

     

订单号:1个订单日期:10/2/2010描述:机械销售订单金额:12000

     

订单号:2订单日期:20/2/2010描述:零件销售订单金额:1000

2 个答案:

答案 0 :(得分:3)

您的Salesman构造函数接受了Order[]个订单,但看起来您在任何地方都没有引用它(除非您在getSalary或注释掉的部分中执行此操作)

您需要添加类似

的内容

this.orders = 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!

答案 1 :(得分:0)

如果你说的是你有一个Employee数组,并且每个Salesman(仅)有一个成员提供他自己已售出的订单,那么你必须使用数组数组。

在第一个视图中,您的Employee数组更可能是一个向量,即一维数组。另外,您的Salesman类有一个Order数组,它似乎也是一个向量。如果这是您实际获得的,您只需要遍历Salesman.Orders成员即可获得Salesman所做的销售。

由于它被标记为[homework],我拒绝编写代码并为您提供所有烹饪。

此外,这里有一些提示:

  1. 您已遍历Employee数组,因此您知道如何遍历一个;

  2. 你说Salesman来自Employee类,因此Employee也许可以输入Salesman类型,然后你就会得到你的实例Salesman类的实际值EmployeeSalesman,否则应返回null;

  3. 现在,您可以通过属性方法(getter和setter方法)访问字段;

  4.   

    那么,你如何才能从类的外部访问Orders,并将其作为数组公开?

         

    如果您能够将其作为数组公开,那么如何遍历数组以获取每个订单数量,以便计算此Salesman实例的销售量?