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