为什么Java里面的静态方法不能是抽象的?

问题是为什么Java里面不能定义一个抽象的静态方法?例如:

abstract class foo {abstract void bar( ); // <-- this is okabstract static void bar2(); //<-- this isn't why?
}

回答一

因为抽象的意思是”不实现任何功能“,而静态的意思是”无论你有没有一个对象实例,都要这个功能“,所以说它们逻辑上就是矛盾的。

回答二

抽象这个符号表示这个方法一定要在子类里面覆写

在Java里面静态成员(域和方法)不能被子类覆写(这不一定是绝对成立在别的面向对象的语言中,像SmallTalk)一个静态成员可能被隐藏起来,但是和覆写在本质上是不同的。

因为静态成员不能在子类里面被覆写,abstrac就不可能修饰它们了

顺便说一下,其他语言支持静态继承,就像实例继承那样。从语法的角度来看,这些语言通常要求类名被包括在语句里面。例如Java里面,假如你在写A类的代码,这些语句都是等价的(如果methodA() 是一个静态的方法,并且没有任何实例对象也具有有相同的签名):

ClassA.methodA();
methodA();

在SmallTalk里面,类名不是可选的,所以这个语法是(注意:SmallTalk不用.去分割主语和动词的,而是用它作为中止符号)

ClassA methodA.

因为这个类名是必须的,所以可以通过遍历这个类的层次结构去决定这个类的正确版本。值得一提的是,我会偶然错过静态继承,并且我刚开始使用Java时,就因为缺少静态继承而痛苦。另外,SmallTalk是鸭子类型的(因此是不支持契约编程的)。因此它没有对类成员的抽象修饰符。

文章翻译自Stack Overflow:https://stackoverflow.com/questions/370962/why-cant-static-methods-be-abstract-in-java

为什么Java里面的静态方法不能是抽象的相关推荐

  1. Java 静态变量,静态方法,静态常量(java static 关键字)

    Java 静态变量,静态方法,静态常量  就是变量 ,方法,常量前面添加了static 关键字 为什么要使用静态的呢 有时候在处理问题时会需要两个类在同一个内存区域共享一个数据, 不如现在 Main ...

  2. java实例方法,Java实例和静态方法

    本篇文章帮大家学习java实例和静态方法,包含了java实例和静态方法使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. 类可以有两种类型的方法:实例方法和类方法. 实例方法 ...

  3. Scala调用Java静态成员及静态方法注意点——只能通过当前类名调用而不能借助子类调用父类静态成员/方法

    只能通过当前类名NioUtil调用静态成员 package com.zxl.scalaimport cn.hutool.core.io.{FileUtil, IoUtil, NioUtil} impo ...

  4. Java静态域与静态方法

    Java静态域与静态方法 @(JAVA)[java] 在Java中,静态修饰符static只能用于类的成员变量与成员方法. (一)静态域 1.静态变量 如果将某个变量定义为static,那么这个类及其 ...

  5. java反射 修改静态方法的值 setAccessible

    转载自 java反射 修改静态方法的值 setAccessible 这几天闲来无事.在网上看了一个题目,相信大家都知道这个题目 static void change(String str){str=& ...

  6. [转载] Java中的静态方法不能被子类重写

    参考链接: 可以在Java中重载或重写静态方法吗 Java中的静态方法不能被子类重写 特点:静态方法属于类的方法,也属于对象的方法,但是静态方法随类的存在. 结论:Java中的静态方法不能被子类重写, ...

  7. zbb20180913 java synchronized同步静态方法和同步非静态方法的异同

    java synchronized同步静态方法和同步非静态方法的异同 所有的非静态同步方法用的都是同一把锁--实例对象本身,也就是说如果一个实例对象的非静态同步方法获取锁后,该实例对象的其他非静态同步 ...

  8. Java成员方法与静态方法的详解

    Java成员方法与静态方法的详解 成员方法:成员方法是在类中定义的,成员方法是创建对象以后才分配内存,每个对象都各有一份.通过对象名进行访问. 静态方法:静态方法是在类中定义的,在创建对象前分配内存, ...

  9. Java 静态类、静态方法和静态变量

    转载自Java 静态类.静态方法和静态变量 Java 静态类.静态方法和静态变量 static 是Java中的一个关键字,我们不能声明普通外层类或者包为静态的.static用于下面四种情况. 1.静态 ...

最新文章

  1. C++实现图像的绘制并实现鼠标交互
  2. 模拟一下goldengate中断后,重新同步操作
  3. Windows 7系统如何重装或安装IE8?
  4. 反射学习系列3-反射实例应用
  5. 简述单片微型计算机屏蔽的作用,单片机原理及应用试题库 - 答案
  6. 无法运行的愿意_分享减肥食谱一周瘦10斤,你愿意尝试吗?
  7. java合并不连续的时间段_基于时间戳不完全匹配的pandas合并
  8. 《中国人工智能学会通讯》——11.34 基于近似动态规划的优化控制研究及 在电力系统中的应用...
  9. sketchup作品_建环学院学生期末作品展第六站计算机辅助设计sketchup作业
  10. H3CSE(路由)学习笔记----下
  11. 陀螺仪指向的是什么方向
  12. ios 文本翻转_反转文字的方法_深入浅出 iPhone 开发 (使用 Swift4)_iOS视频-51CTO学院...
  13. 【九天教您南方cass 9.1】 03 编码法绘制地形图
  14. 2022五一数学建模b题完成代码
  15. excel组合汇总_Excel汇总20151102
  16. Pygame Surface对象
  17. 【大数据】Hadoop生态系统及其组件
  18. 2022-10-24 ClickHouse 源码解析-查询引擎经典理论
  19. 实现动态表单功能设计思路
  20. 【VMware Fusion】如何配置VMware Fusion中的Vmnet网卡

热门文章

  1. 修改之前的myshell使之支持输入输出重定向
  2. 【FPGA VerilogHDL】第一次尝试:LED灯基础实验
  3. 进程间通信————信号
  4. Python内置数据类型之list
  5. 程序员如何自我学习和成长?深度好文
  6. 如何写一个vue指令directive
  7. 面试题28 字符串排列
  8. WebApi个人理解概要
  9. [原]Threads vs Processes in Linux 分析
  10. 【数据库的备份与还原】 .