如何在java中重写静态方法?

如何在java中重写静态方法?,java,static,static-methods,Java,Static,Static Methods,我已经看到了中给出的回答,并承认它只在特定情况下有用 那么,我们可以在java中重写静态方法吗?在java中,您不能直接重写静态方法(在大多数情况下,这没有意义,对于静态方法,调用签名是(Class.method()) 您可以在另一个类中创建一个新的静态方法并直接调用它(NewClass.method()),而不是直接重写该方法 现在,在main方法中,您将调用SpecialEmployee.calculateNewSalary(double),而不是Employee.calculateNewS

我已经看到了中给出的回答,并承认它只在特定情况下有用


那么,我们可以在java中重写静态方法吗?

在java中,您不能直接重写静态方法(在大多数情况下,这没有意义,对于静态方法,调用签名是(Class.method())

您可以在另一个类中创建一个新的静态方法并直接调用它(NewClass.method()),而不是直接重写该方法

现在,在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 static double calculateNewSalary(double salary, double additionalIncrease){
       return salary*1.03*additionalIncrease; 
   }
}
或者只需创建一个可自定义的方法:

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

additionalIncrease==null
?原语不能为null。在任何情况下,这解决了什么问题?这与重写有什么关系?这个问题没有什么意义,答案也没有什么意义。正如您所指出的,您并没有真正重写任何内容,而是创建了其他同名的静态方法。imho它有点像t瞄准你的脚。最终项目中的某个人会变得懒惰,忘记完全限定class.methodName(),只使用
methodName()
。它会编译得很好(有一些警告),但现在代码中包含难以跟踪的逻辑错误。这称为
隐藏
   public static double calculateNewSalary(double salary, double additionalIncrease){
       if(additionalIncrease == null){
         return salary * 1.03;
       }
       return salary*1.03*additionalIncrease; //give a yearly increase
   }