我正在尝试介绍OOP内容,但我坚持在这里。我在Company类,employee [0] .setBonus(50)部分中遇到错误。除了在Employee类中定义Bonus方法外,没有其他解决方法吗?还是有将所有对象保持在一个阵列中的方法?我定义了奖励方法,但是还有另一件事,在Empoyee类的getBonus方法中我必须返回什么?
public class Company
{
private static Employee[] employees;
public Company()
{
employees= new Employee[]{new Manager("Sapo",10000),new Employee("James",5000),new Employee("Jessie",5001)};
}
public static void main(String[] args)
{
Company company= new Company();
employees[0].setBonus(50);
System.out.println(employees[0].getBonus());
}
}
public class Employee extends Person
{
int salary;
public Employee(String name,int salary) {
super(name);
setSalary(salary);
// TODO Auto-generated constructor stub
}
public void setSalary(int salary)
{
this.salary= salary;
}
public int getSalary()
{
return salary;
}
}
public class Manager extends Employee
{
private int bonus;
public Manager(String name, int salary) {
super(name, maas);
}
public void setBonus(int bns)
{
bonus=bns;
}
public int getBonus()
{
return bonus;
}
public int getSalary()
{
return salary+bonus;
}
}
我糊涂了。
还是有将所有对象保持在一个阵列中的方法?
您可以,但这将迫使您写:
if ( employees[0] instanceof Manager){
((Manager) employees[0]).setBonus(50);
}
这不是一个好习惯。
从功能上讲,如果奖励是仅拥有Manager
实例的属性,则Employee
实例不应尝试设置或获取它。
当您这样做时:
employees[0].setBonus(50);
编译器不知道具体实例。它只能看到Employee
。在这个非常简单的代码中,我们可以直接看到第一位员工是一名经理,但是在实际应用中,数组可能会被多次修改。试图记住管理者在哪些索引上容易出错。如果需要在一个或多个管理器上调用特定于管理器的方法,则应确保知道哪些变量是管理器。因此,宣布他们为经理似乎是更自然的方法。
为了解决您的问题,似乎更有趣的是两个数组:一个用于员工,另一个用于经理:
private static Employee[] employees;
private static Manager[] managers;
现在您可以:
public Company()
{
employees= new Employee[]{new Employee("James",5000),new Employee("Jessie",5001)};
managers= new Employee[]{new Manager("Sapo",10000)};
}
public static void main(String[] args){
Company company= new Company();
managers[0].setBonus(50);
System.out.println(managers[0].getBonus());
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句