我有一个抽象类 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/