在数组中创建Java中超类类型的子类对象

萨珀·库姆库(Sarper Kumcu)

我正在尝试介绍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;
}
}

我糊涂了。

大卫xxx

还是有将所有对象保持在一个阵列中的方法?

您可以,但这将迫使您写:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在数据库Java中从超类null继承的类集属性中创建对象

从超类对象数组中调用子类方法

子类的对象创建是否创建超类的对象(如果是)是否可以在子类中访问它?

从 Java 中超类类型的 ArrayList 调用子类方法

Java:分配了子类数组对象的超类数组对象

当子类对象存储在超类数组中时,如何调用子类方法?

Swift:从超类返回子类类型的对象数组

如何从 Python 中现有的超类类型对象实例化子类类型变量

是否有可能在超类类型的数组中包含子类数组

子类java中的“重写”超类成员

Java,是否可以将子类中的对象“转换”为超类中的对象

Java在子类中创建对象

通过Dart中的子类参数传递超类对象时没有类型错误

将通用子类型类信息传递给Java中的超类

将子类中的对象放入超类类型的数组后如何调用子类方法?

当对象是子类类型时,为什么我不能从超类调用子类中的公共方法?

超类类型对象的子类的构造方法?

将子类型对象添加到超类型列表中,然后从超类型列表中返回子类型列表

如何从超类创建子类的实例的数组

对象类作为Java中的超类

在子类中初始化超类对象

我可以通过Java中的超类引用访问子类对象的属性吗?

Java继承问题。在超类数组中调用子类方法不会编译

我如何区分超类数组中的不同子类?

在类中创建对象数组

有没有一种简单的方法可以从超类对象列表中创建子类对象列表?

在数组中创建对象的多个实例

创建持有超类和子类对象的对象数组的正确方法

在子类Java中更改类变量类型