2

我是 java 新手,我不断收到此错误消息:

无法访问 Managesalary 类型的封闭实例。必须使用 Managesalary 类型的封闭实例来限定分配(例如 xnew A(),其中 x 是 Managesalary 的实例)。在线的 *

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

    {
        System.out.println("MY SALARY REVIEW");
        System.out.println("================");


    *   Salary Jan= new Salary();
        Jan.Month= "JANUARY";
        Jan.HoursWorked= 12;
        Jan.PerHourRate= 10;
        Jan.TaxRate= 0.10;

        Jan.printSalaryDetails();

        Salary Month2= new Salary();
        Month2.Month= "FEBUARY";
        Month2.PerHourRate= 10;
        Month2.TaxRate= 0.10;
        Month2.printSalaryDetails();

    }

class Salary
    {
    String Month = "";
    int HoursWorked= 0;
    int PerHourRate= 0;
    double TaxRate= 0.10;
    int MonthlySalary= (HoursWorked*PerHourRate);

    public void printSalaryDetails(){
        System.out.println("MONTH OF = " +Month);
        System.out.println("PER HOUR RATE = " +PerHourRate);
        System.out.println("TAX RATE =   " +TaxRate);
        System.out.println("TOTAL MONTHLY INCOME = " +MonthlySalary);
        System.out.println("================");
    } 
    } 
}
4

5 回答 5

2

错误说您必须通过引用封闭类的实例来创建内部类。

ManageSalary mn = new Managesalary()
Salary salary =  mn.new Salary();
于 2012-12-11T15:06:23.690 回答
2

将您的 Salary 类复制到单独的文件名 Salary.java 中并将其公开,最好将其放在主类之外,或者将其声明为静态。

于 2012-12-11T15:12:07.300 回答
1

内部类需要对外部类的现有引用。没有它的实例Managesalary就不可能实例化Salary。您可以通过执行以下操作来实现:

Managesalary mSalary = new Managesalary();
Salary Jan= mSalary.new Salary();
于 2012-12-11T15:05:53.677 回答
0

您已将Salary该类定义为的内部类Managesalary(尽管您的代码缩进隐藏了一点)。

因此, 的每个实例都Salary必须绑定到 的实例Managesalary

在您的main方法中,创建Managesalary(eg ManageSalary ms = new ManageSalary()) 的实例并将您的内部类对象初始化为ms.new Salary().

于 2012-12-11T15:07:21.167 回答
0

将您的薪水类设为静态

static class Salary{
    // rest of the code
}
于 2018-03-27T23:59:34.210 回答