本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看活动链接
为什么静态方法不能在Java中抽象化?
问题是在Java中为什么不能定义抽象的静态方法?例如
abstract class foo { abstract void bar( ); // <-- this is ok abstract static void bar2(); //<-- this isn't why? }
高分回答:
abstract方法的注释指示该方法必须在子类中被覆盖。
在Java中,static成员(方法或字段)不能被子类覆盖(在其他面向对象的语言中不一定是正确的,请参阅SmallTalk。)static成员可能是隐藏的,但与overrided根本不同。
由于不能在子类中覆盖静态成员,因此不能将abstract注释应用于它们。
顺便说一句-其他语言也支持静态继承,就像实例继承一样。从语法角度来看,这些语言通常要求将类名包含在语句中。例如,在Java中,假设您正在用ClassA编写代码,则它们是等效的语句(如果methodA()是静态方法,并且没有具有相同签名的实例方法):
ClassA.methodA();
和
methodA();
在SmallTalk中,类名不是可选的,因此语法是(请注意,SmallTalk不会使用。来分隔“主题”和“动词”,而是将其用作statemend终止符):
ClassA methodA.
因为始终需要类名,所以可以始终通过遍历类层次结构来确定方法的正确“版本”。对于它的价值,我偶尔会错过static继承,并且在我刚开始使用Java时就因为缺少静态继承而感到痛苦。此外,SmallTalk是鸭子类型的(因此不支持按合同编程)。因此,它没有abstract用于类成员的修饰符。
高分回答:
因为“抽象”的意思是:“不实现任何功能”,而“静态”的意思是:“即使没有对象实例也有功能”。这是一个逻辑上的矛盾。
文章翻译自kgs4h5t57thfb6iyuz6dqtun5y-ac4c6men2g7xr2a-stackoverflow-com.translate.goog/questions/3…
作者建议:抽象可能是需要实现的,而静态本身是不需要实现的
真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话
求点赞👍 求关注❤️ 求分享👥 对8块腹肌的我来说真的 非常有用!!!
如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️