繁体   English   中英

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

[英]How can I access an object array located inside of another object which is then inside a superclass array?

我有一个抽象类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 =兼职,而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 ");

如何访问employee数组上Salesman对象内部的order数组? 我已经尝试过强制转换,但由于Orders不是Employee的子类,因此无法正常工作。

例如,我需要它来打印,

推销员订单:约翰·库恩

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

订单号:1订单日期:10/2/2010说明:机械销售订单金额:12000

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

您的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!

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

乍一看,您的Employee数组更可能是一个向量,即一维数组。 另外,您的Salesman类具有一个Order数组,这似乎也是一个向量。 如果这是你实际得到的,你只需要通过你的迭代Salesman.Orders成员,让您的销售Salesman做到了。

由于它被标记为[homework] ,因此我拒绝编写代码,并为您准备全部内容。

此外,这里有一些提示:

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

  2. 您说一个SalesmanEmployee类派生的,因此使Employee可能是类型可铸型到Salesman ,然后您将获得Salesman类的实例,该实际EmployeeSalesman ,否则应返回null;

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

因此,如何使Orders可以从类外部访问,并将其公开为数组?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM