我的一个朋友问我是否可以覆盖Java中的静态变量,我甚至对他甚至想到这种奇怪的编码方式感到震惊。然后他向我解释说这在PHP中是可行的,我想知道一个好的开发人员应该这样做是否有充分的理由。在我看来,静态成员被定性为类成员而与对象无关,因此它们与类的派生无关,但我不能说服他,因为他是如此天真和固执。
任何人都可以对这件事提出一个好的论据或说服我这是一个很酷的功能吗?
答案 0 :(得分:1)
静态继承没有任何意义。它不是不可能的,只是你没有从中获益。
使用正常继承,您可以获得针对同一事物具有不同实现的好处,并且不知道/关心将使用哪个实现。使用静态继承,您没有可以使用的对象,并且您正在使用类名,因此您无法利用多态性。
E.g。如果您正在调用Child.someMethod(),那么您将与子项的实现绑定,如果您实际上只需要父项,则可以改为使用Parent.someMethod()。如果您需要向Parent实现添加一些内容,您只需创建一个Child.someOtherMethod(),您可以在其中调用父项,然后执行其他操作。静态继承只是语法糖...
答案 1 :(得分:0)
据我所知,Java中的static关键字用于定义类变量。 Class变量为该类的所有对象都有一个实例。所以在Java中你不能覆盖静态变量,它没有意义。对一个类中的静态变量所做的任何更改都会传播到另一个类。这就是JAVA中使用静态的东西。
这与IT应该在PHP中工作的方式相同(我不是真正的PHP专家),但如果您的朋友可以提供代码,显示PHP中的静态变量被覆盖且变量具有与另一个类不同的值,我会很高兴的。