如何覆盖java中的静态方法?

时间:2017-03-20 17:56:05

标签: java static static-methods

我已经看到Why doesn't Java allow overriding of static methods?中给出的回复,并承认它只会在特定情况下有用......

那么我们可以覆盖java中的静态方法吗?

1 个答案:

答案 0 :(得分:1)

在Java中,你不能直接覆盖静态方法(在大多数情况下,对于静态方法,调用签名是(Class.method())是没有意义的。

您可以在其他类中创建一个新的静态方法,直接调用该方法,而不是直接覆盖该方法(NewClass.method())

nil

现在在main方法中,您将调用SpecialEmployee.calculateNewSalary(double)而不是Employee.calculateNewSalary(double)。

但是,尽管此方法允许您的基本方法更通用,但它会降低代码可维护性,因为这是不常见的代码实践,并且您的逻辑现在分为多个类。请记住,只需创建一个更可自定义或重载的基本方法,即可完成相同的操作:

public class Employee{
   public static double calculateNewSalary(double salary){
       return salary*1.03; //give a yearly increase
   }
}

public class SpecialEmployee extends Employee{
   public static double calculateNewSalary(double salary){
      return Employee.calculateSalary(salary) * 1.02; //give them an additional raise
   }
}

或简单地创建一个可自定义的方法:

public class Employee{
   public static double calculateNewSalary(double salary){
       return salary*1.03; //give a yearly increase
   }
   public static double calculateNewSalary(double salary, double additionalIncrease){
       return salary*1.03*additionalIncrease; 
   }
}