155个建议笔记--建议33:不要覆写静态方法
我们知道在JAVA中可以通过overRide来增强或减弱父类的方法和行为,但覆写是针对非静态方法的,不能针对静态方法(也叫类方法),为什么呢?看一下下面的例子:
View Code public class OverRideTepublic static void main(String[] args){ Father father=new Son(); father.print1(); father.print2(); } } class Father{ public static void print1(){ System.out.println("我是父类静态方法"); } public void print2(){ System.out.println("我是父类非静态方法"); } } class Son extends Father{ public static void print1(){ System.out.println("我是子类静态方法"); } public void print2(){ System.out.println("我是子类非静态方法"); } }1 public class OverRideTest {2 3 public static void main(String[] args){4 Father father=new Son();5 father.print1();6 father.print2();7 }8 9 } 10 class Father{ 11 public static void print1(){ 12 System.out.println("我是父类静态方法"); 13 } 14 public void print2(){ 15 System.out.println("我是父类非静态方法"); 16 } 17 } 18 class Son extends Father{ 19 public static void print1(){ 20 System.out.println("我是子类静态方法"); 21 } 22 23 public void print2(){ 24 System.out.println("我是子类非静态方法"); 25 } 26 }
看程序子类son覆写了父类father中的print1(),print2()方法,按道理来说应该都是执行覆写后的方法,然而
运行之后结果:
我是父类静态方法
我是子类非静态方法
分析原因:
son的两个覆写区别仅仅在是否有static,每个实例对象都有两个类型,一个是表面类型,一个是实际类型,表面类型是在声明时得到的,实际类型是对象产生时的类型,例子中,Father是表面类型,Son是实际类型,对于非静态方法而言,是根据对象的实际类型来执行;而对于静态方法则比较特别,首先静态方法不依赖于实例对象,通过类名来访问,其次,可以通过对象访问静态方法,如果是通过对象访问,JVM是通过对象的表面类型来找到静态方法的入口,因而执行Father中的静态方法。
转载于:https://www.cnblogs.com/yuwenfeng/archive/2013/05/09/3069152.html
155个建议笔记--建议33:不要覆写静态方法相关推荐
- [改善Java代码]不要覆写静态方法
建议33: 不要覆写静态方法 我们知道在Java中可以通过覆写(Override)来增强或减弱父类的方法和行为,但覆写是针对非静态方法(也叫做实例方法,只有生成实例才能调用的方法)的,不能针对静态方法 ...
- Git笔记(33) Rerere
Git笔记(33) Rerere 1. 重用记录的解决方案 2. 干净的合并和变基 3. 举例 1. 重用记录的解决方案 git rerere 功能是一个隐藏的功能 正如它的名字"重用记录的 ...
- Unity Shader 学习笔记(33) 全局光照(GI)、反射探针、线性空间和伽马空间、高动态范围(HDR)
Unity Shader 学习笔记(33) 全局光照(GI).反射探针.线性空间和伽马空间.高动态范围(HDR) 参考书籍:<Unity Shader 入门精要> [<Real-Ti ...
- 视觉SLAM笔记(33) 对极约束求解相机运动
视觉SLAM笔记(33) 对极约束求解相机运动 1. 本质矩阵求解相机运动 2. 特征提取函数 3. 2D-2D姿态估计函数 4. 归一化坐标函数 5. 求解相机运动 6. 尺度不确定性 7. 多于八 ...
- ROS笔记(33) 关节空间规划
ROS笔记(33) 关节空间规划 1. 运动规划 2. 关节空间运动 3. 启动机械臂 4. 关节空间运动规划 5. 启动规划 1. 运动规划 这里提到的"运动规划" ( Moti ...
- 几何光学学习笔记(33)- 7.3 色光混合与格拉斯曼定律 7.4 颜色的匹配
几何光学学习笔记(33)- 7.3 色光混合与格拉斯曼定律& 7.4 颜色的匹配 7.3 色光混合与格拉斯曼定律 1.色光混合 2.格拉斯曼定律 3. 颜色的运算定律 3.1 色光混合符合加法 ...
- 深度学习笔记(33) 特征点检测
深度学习笔记(33) 特征点检测 1. 特征点 2. 设定特征点 3. 关键特征点 1. 特征点 利用神经网络进行对象定位,即通过输出四个参数值bx.by.bh和bw给出图片中对象的边界框 概括地说, ...
- [改善Java代码]覆写equals方法必须覆写hashCode方法
覆写equals方法必须覆写hashCode方法,这条规则基本上每个Javaer都知道,这也是JDK API上反复说明的,不过为什么要这样做呢?这两个方法之间有什么关系呢?本建议就来解释该问题,我们先 ...
- java 重载 大于_详解java重载与覆写的区别
很多同学对于overload和override傻傻分不清楚,建议不要死记硬背概念性的知识,要理解着去记忆. 先给出我的定义: 首先我们来讲讲:重载(Overloading) (1) 方法重载是让类以统 ...
最新文章
- android中DatePicker和TimePicker的使用
- Can't connect to local MySQL Server throught socket '/var/run/mysqld/mysqld.sock'(2)
- HTML中的转义字符 (转)
- spark on yarn :state: ACCEPTED一直 出现
- UA MATH567 高维统计专题2 Low-rank矩阵及其估计3 Rank RIP
- Android -ui控件
- 斜率优化(CDQ分治,Splay平衡树):BZOJ 1492: [NOI2007]货币兑换Cash
- 硬货 - 技术人也能轻松玩转公众号?正确姿势竟然是...
- python数据库操作sqlite_使用Python对SQLite数据库操作
- 用OpenSSL写一个简单的Server/Client程序:证书与私钥
- 重磅!苹果正式开源iOS内核源码!
- Flash Builder 4 正式版序列号
- 专业学习与职业发展之我见
- Windows蓝屏代码及解决方案最全合集
- 自动搜索关键词点击广告或网站,自动换ip实现过程
- 177.5. FAQ
- 【教程】通过lothelper实现短信接收测试
- 战双服务器维护,战双帕弥什维护到几点 战双帕弥什维护什么时候结束
- 攻下隔壁女神的路由器(转)
- 创业者在创业之初都需要做哪些准备工作呢
热门文章
- ELK7.8.1的Docker搭建过程
- C# HttpWebRequest GET HTTP HTTPS 请求
- 本人服务器遭受黑客长期攻击,特把这几天做的一些有用的安全方面总结出来,以方便以后查阅
- Python+Flask.0010.FLASK即插视图之自定义视图类及修饰器
- java获取classpath以外的路径
- CentOS6.4下安装TeamViewer8
- jboss-AS目录结构了解(资料摘取)
- Don't Laugh!I'm An English Book笔记(五)——面部词语大总结加补充
- 什么时候使用静态方法
- leetcode981. 基于时间的键值存储(treemap)