メソッドがアクセスするオブジェクトの数などではなく、誰がメソッドを呼び出せるかという問題です。
static
フィールドとメソッドは、特定のインスタンスではなくクラスに属します。したがって、何回インスタンス化しても、1 つだけ存在します。フィールドへの各従業員の参照は、同じ場所に戻ります。employeeCount フィールドを使用することで、既にこれを取得できます。同じロジックをメソッドに適用するだけです。Employee
int employeeCount
employeeCount
静的にすることで、すべての従業員がそれを呼び出すことができるだけでなく、クラス自体がメソッドを呼び出すことgetEmployeeCount()
ができると言っています。Employee
メソッドを呼び出すためにインスタンスは必要ありません。
Employee.getEmployeeCount(); //Valid, because getEmployeeCount() is static
Employee.name; //Invalid (non-static reference from static context) because *which* employee's name?
静的フィールドにのみアクセスしているため、これは理にかなっています。どのインスタンスで呼び出しても、同じ値が返されます。次のコードを検討してください。
Employee a = new Employee();
Employee b = new Employee();
System.out.println(a.getEmployeeCount()); //2
System.out.println(b.getEmployeeCount()); //2
System.out.println(Employee.getEmployeeCount()); //2
Employee c = new Employee();
System.out.println(a.getEmployeeCount()); //3
System.out.println(b.getEmployeeCount()); //3
System.out.println(c.getEmployeeCount()); //3
System.out.println(Employee.getEmployeeCount()); //3
getEmployeeCount()
非静的にすることを妨げるものは何もありません。ただし、どのインスタンスでメソッドを呼び出すかはまったく問題ではないため (実際にはインスタンスは必要ありません)、メソッドを にすることは便利であり、良い方法static
です。