为什么Java里面的静态方法不能是抽象的
为什么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里面的静态方法不能是抽象的相关推荐
- Java 静态变量,静态方法,静态常量(java static 关键字)
Java 静态变量,静态方法,静态常量 就是变量 ,方法,常量前面添加了static 关键字 为什么要使用静态的呢 有时候在处理问题时会需要两个类在同一个内存区域共享一个数据, 不如现在 Main ...
- java实例方法,Java实例和静态方法
本篇文章帮大家学习java实例和静态方法,包含了java实例和静态方法使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. 类可以有两种类型的方法:实例方法和类方法. 实例方法 ...
- Scala调用Java静态成员及静态方法注意点——只能通过当前类名调用而不能借助子类调用父类静态成员/方法
只能通过当前类名NioUtil调用静态成员 package com.zxl.scalaimport cn.hutool.core.io.{FileUtil, IoUtil, NioUtil} impo ...
- Java静态域与静态方法
Java静态域与静态方法 @(JAVA)[java] 在Java中,静态修饰符static只能用于类的成员变量与成员方法. (一)静态域 1.静态变量 如果将某个变量定义为static,那么这个类及其 ...
- java反射 修改静态方法的值 setAccessible
转载自 java反射 修改静态方法的值 setAccessible 这几天闲来无事.在网上看了一个题目,相信大家都知道这个题目 static void change(String str){str=& ...
- [转载] Java中的静态方法不能被子类重写
参考链接: 可以在Java中重载或重写静态方法吗 Java中的静态方法不能被子类重写 特点:静态方法属于类的方法,也属于对象的方法,但是静态方法随类的存在. 结论:Java中的静态方法不能被子类重写, ...
- zbb20180913 java synchronized同步静态方法和同步非静态方法的异同
java synchronized同步静态方法和同步非静态方法的异同 所有的非静态同步方法用的都是同一把锁--实例对象本身,也就是说如果一个实例对象的非静态同步方法获取锁后,该实例对象的其他非静态同步 ...
- Java成员方法与静态方法的详解
Java成员方法与静态方法的详解 成员方法:成员方法是在类中定义的,成员方法是创建对象以后才分配内存,每个对象都各有一份.通过对象名进行访问. 静态方法:静态方法是在类中定义的,在创建对象前分配内存, ...
- Java 静态类、静态方法和静态变量
转载自Java 静态类.静态方法和静态变量 Java 静态类.静态方法和静态变量 static 是Java中的一个关键字,我们不能声明普通外层类或者包为静态的.static用于下面四种情况. 1.静态 ...
最新文章
- C++实现图像的绘制并实现鼠标交互
- 模拟一下goldengate中断后,重新同步操作
- Windows 7系统如何重装或安装IE8?
- 反射学习系列3-反射实例应用
- 简述单片微型计算机屏蔽的作用,单片机原理及应用试题库 - 答案
- 无法运行的愿意_分享减肥食谱一周瘦10斤,你愿意尝试吗?
- java合并不连续的时间段_基于时间戳不完全匹配的pandas合并
- 《中国人工智能学会通讯》——11.34 基于近似动态规划的优化控制研究及 在电力系统中的应用...
- sketchup作品_建环学院学生期末作品展第六站计算机辅助设计sketchup作业
- H3CSE(路由)学习笔记----下
- 陀螺仪指向的是什么方向
- ios 文本翻转_反转文字的方法_深入浅出 iPhone 开发 (使用 Swift4)_iOS视频-51CTO学院...
- 【九天教您南方cass 9.1】 03 编码法绘制地形图
- 2022五一数学建模b题完成代码
- excel组合汇总_Excel汇总20151102
- Pygame Surface对象
- 【大数据】Hadoop生态系统及其组件
- 2022-10-24 ClickHouse 源码解析-查询引擎经典理论
- 实现动态表单功能设计思路
- 【VMware Fusion】如何配置VMware Fusion中的Vmnet网卡