[Java]为什么我的tester类中会出现这些错误?

[Java]为什么我的tester类中会出现这些错误?,java,inheritance,subclass,superclass,Java,Inheritance,Subclass,Superclass,我有一个超类、子类和一个tester类。有人能帮我解决我做错的事吗 以下是我在测试仪课程中需要的内容- 1.创建经理和员工的对象 创建函数Review salary以修改在经理或员工的构造函数中设置的薪资。(使用多态性的概念) 使用对象的显示功能打印与对象类相关的信息 这是我的课 超类: public class Employee { private int employeeNumber; private String employeeName; private doub

我有一个超类、子类和一个tester类。有人能帮我解决我做错的事吗

以下是我在测试仪课程中需要的内容- 1.创建经理和员工的对象

  • 创建函数Review salary以修改在经理或员工的构造函数中设置的薪资。(使用多态性的概念)

  • 使用对象的显示功能打印与对象类相关的信息

  • 这是我的课

    超类:

    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();
             }
    
        }
    
    }
    
    **我的问题:

    我在考试课上出错了。当我创建一个manager对象时,它说构造函数是未定义的。另外,对于我的私人空白“reviseSalary”,它说我不能使用空白

    有人能告诉我我做错了什么吗?如果可能的话,能帮助我创建我的修订版功能吗


    谢谢

    把你的修订版放在主方法之外

    发生此错误是因为Java不支持嵌套函数

    这将是您的输出:

    • 员工编号:11111

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

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

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

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

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

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

    您可以发布从控制台获得的错误吗?您在主方法中定义了方法“reviseSalary”。请阅读@RobertKock写的内容,这是唯一的问题,其他一切都很好。@J.Doe如果您用不同的方法声明和实例化manager,另一个方法无法访问它。您在main中声明了它,并试图从reviseSalary()访问它。请不要通过破坏您的帖子为人们做更多的工作。通过在Stack Exchange(SE)网络上发布,您已根据授予SE分发该内容的不可撤销权利(即,无论您未来的选择如何)。根据SE政策,该帖子的非故意破坏版本是发布的版本。因此,任何故意破坏行为都将被还原。若要按照示例中显示的方式调用方法reviseSalary(),应将其声明为静态。否则,您将需要首先引用Test类的实例来调用该引用上的reviseSalary(),例如:Test t=new Test();然后:t.reviseSalary()@PrzemysławMoskal在reviseSalary方法中为我的manager对象获取“manager无法解决”错误。有什么想法吗?@MarcoVeríssimo在reviseSalary方法中为我的manager对象获取“manager无法解决”错误。有什么想法吗?1)在reviseSalary()方法声明中添加一个参数:private void reviseSalary(Manager){…}。2) 当您在main()中调用该方法时,请尝试这样做:reviseSalary(manager)@我测试了代码,现在完全可以工作了。告诉我你是否还有一个problem@J.Doe如果将此字段设置为静态,则只能在该类内部设置或更改分配给此字段的值。但在管理器类中,您既不提供构造函数内部的初始化,也不提供setter方法来为该字段赋值。
    Test t = new Test() ;
    t.reviseSalary();