【问题标题】:[Java]Why am I getting these errors in my tester class?[Java]为什么在我的测试程序类中出现这些错误?
【发布时间】:2017-12-10 21:41:26
【问题描述】:

我有一个超类、子类和一个测试器类。任何人都可以帮助解决我做错的事情吗?

这是我在测试员课程中所需要的—— 1. 创建Manager和Employee对象。

  1. 创建一个函数修改薪水,以修改经理或员工的构造函数中设置的薪水。 (使用多态的概念)

  2. 使用对象的显示函数打印与对象类相关的信息。

这是我的课程

超类:

public class Employee {
    private int employeeNumber;
    private String employeeName;
    private double employeeSalary;

    public Employee(int employeeNumber, String employeeName, double employeeSalary) {
         this.employeeNumber = employeeNumber;
         this.employeeName = employeeName;
         this.employeeSalary = employeeSalary;
    }

         public double getEmployeeSalary() {
            return employeeSalary;
            }

         public void setEmployeeSalary(double employeeSalary) {
            this.employeeSalary = employeeSalary;
            }



         public void display(){
               System.out.println("Employee Number: "+ employeeNumber +"\n"
                     + "Employee Name: " + employeeName + "\n" 
                     + "Employee Salary: "  + employeeSalary);
            }

        }

子类:

public class Manager extends Employee {

    private int rewards;
    public Manager(int employeeNumber, String employeeName, double employeeSalary) {
        super(employeeNumber, employeeName, employeeSalary);
    }


    public void display() {
        super.display();
        System.out.println(rewards);
    }
}

测试人员:

public class Test {
    public static void main(String [] args) {


         Manager manager = new Manager(11111, "Elon Musk", 42344);
          manager.display();     

         Employee employeeOne = new Employee(324, "Bob Den", 3522);
         Employee employeeTwo = new Employee(44, "Tim Pipe", 4234 );
         Employee employeeThree = new Employee(42, "Asif Blar", 4321);

         private void reviseSalary() {
         double employeeSalary = manager.getEmployeeSalary();
         manager.setEmployeeSalary(employeeSalary +(employeeSalary /10));
         manager.display();
         }

    }

}

**我的问题:

我的测试课出错了。当我创建一个管理器对象时,它说构造函数是未定义的。另外,对于我的私人 void “reviseSalary”,它说我不能使用 void

谁能告诉我我做错了什么,并在可能的情况下帮助创建我的 reviseSalary 函数

谢谢

【问题讨论】:

  • 你能发布你从控制台得到的错误吗?
  • 您在 main 方法中定义了您的方法“reviseSalary”。
  • 阅读@RobertKock 写的内容,这是唯一的问题,其他一切都很好。
  • @J.Doe 你用不同的方法声明和实例化管理器,另一个方法不能访问它。您在 main 中声明它并尝试从 reviseSalary() 访问它。
  • 请不要通过破坏您的帖子为人们增加工作量。通过在 Stack Exchange (SE) 网络上发帖,您已在 CC BY-SA 3.0 license 下授予 SE 分发该内容的不可撤销的权利(即无论您未来的选择如何)。根据 SE 政策,帖子的非破坏版本是分发的版本。因此,任何破坏行为都将被撤销。

标签: java inheritance subclass superclass


【解决方案1】:

只需将您的 reviseSalary 放在 main 方法之外。

出现此错误是因为 Java 不支持嵌套函数。

    public class Test {
    public static void main(String [] args) {


        Manager manager = new Manager(11111, "Elon Musk", 42344);
        manager.display();

        Employee employeeOne = new Employee(324, "Bob Den", 3522);
        Employee employeeTwo = new Employee(44, "Tim Pipe", 4234 );
        Employee employeeThree = new Employee(42, "Asif Blar", 4321);

        reviseSalary(manager);
    }
    private static void reviseSalary(Manager manager) {
        double employeeSalary = manager.getEmployeeSalary();
        manager.setEmployeeSalary(employeeSalary +(employeeSalary /10));
        manager.display();
    }
}

这将是你的输出:

  • 员工编号:11111

    • 员工姓名:埃隆·马斯克
    • 员工工资:42344.0
  • 员工编号:11111

    • 员工姓名:埃隆·马斯克
    • 员工工资:46578.4

【讨论】:

  • 以您在示例中显示的方式调用方法 reviseSalary(),它应该声明为静态。否则,您需要首先引用 Test 类的实例才能在该引用上调用 reviseSalary(),例如: Test t = new Test();然后:t.reviseSalary()。
  • @PrzemysławMoskal 在 reviseSalary 方法中为我的经理对象获取“经理无法解决”错误。有什么想法吗?
  • @MarcoVeríssimo 在 reviseSalary 方法中为我的经理对象获取“经理无法解决”错误。有什么想法吗?
  • 1) 在 reviseSalary() 方法声明中添加一个参数:private void reviseSalary(Manager manager) {...}。 2)当您在 main() 中调用该方法时,请尝试这样做: reviseSalary(manager);
  • @J.Doe 我测试了代码,现在可以正常工作了。如果您还有问题,请告诉我
【解决方案2】:

我发现您的代码存在两个主要问题:

1) 您在 main() 方法中声明方法 reviseSalary()。 Java 不允许您在其他方法中声明方法。 您应该在 main() 方法之外声明它并添加关键字 static 以让您无需拥有 Test 类的实例即可调用此方法。否则,如果您不将此方法声明为 static,您将需要一个 Test 类的实例,并且必须在此实例上调用 reviseSalary(),如下所示:

Test t = new Test() ;
t.reviseSalary();

2) 您在 Manager 类中声明了此字段:private int rewards,但您没有声明任何设置方法来为该字段分配任何值。

【讨论】:

  • @J.Doe 如果将此字段设置为静态,则只能在该类内部设置或更改分配给该字段的值。但是在 Manager 类中,您既没有在构造函数内部提供初始化,也没有提供 setter 方法来为该字段赋值。
猜你喜欢
  • 2022-06-22
  • 2014-11-30
  • 1970-01-01
  • 2021-03-24
  • 2019-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多