我们知道在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:不要覆写静态方法相关推荐

  1. [改善Java代码]不要覆写静态方法

    建议33: 不要覆写静态方法 我们知道在Java中可以通过覆写(Override)来增强或减弱父类的方法和行为,但覆写是针对非静态方法(也叫做实例方法,只有生成实例才能调用的方法)的,不能针对静态方法 ...

  2. Git笔记(33) Rerere

    Git笔记(33) Rerere 1. 重用记录的解决方案 2. 干净的合并和变基 3. 举例 1. 重用记录的解决方案 git rerere 功能是一个隐藏的功能 正如它的名字"重用记录的 ...

  3. Unity Shader 学习笔记(33) 全局光照(GI)、反射探针、线性空间和伽马空间、高动态范围(HDR)

    Unity Shader 学习笔记(33) 全局光照(GI).反射探针.线性空间和伽马空间.高动态范围(HDR) 参考书籍:<Unity Shader 入门精要> [<Real-Ti ...

  4. 视觉SLAM笔记(33) 对极约束求解相机运动

    视觉SLAM笔记(33) 对极约束求解相机运动 1. 本质矩阵求解相机运动 2. 特征提取函数 3. 2D-2D姿态估计函数 4. 归一化坐标函数 5. 求解相机运动 6. 尺度不确定性 7. 多于八 ...

  5. ROS笔记(33) 关节空间规划

    ROS笔记(33) 关节空间规划 1. 运动规划 2. 关节空间运动 3. 启动机械臂 4. 关节空间运动规划 5. 启动规划 1. 运动规划 这里提到的"运动规划" ( Moti ...

  6. 几何光学学习笔记(33)- 7.3 色光混合与格拉斯曼定律 7.4 颜色的匹配

    几何光学学习笔记(33)- 7.3 色光混合与格拉斯曼定律& 7.4 颜色的匹配 7.3 色光混合与格拉斯曼定律 1.色光混合 2.格拉斯曼定律 3. 颜色的运算定律 3.1 色光混合符合加法 ...

  7. 深度学习笔记(33) 特征点检测

    深度学习笔记(33) 特征点检测 1. 特征点 2. 设定特征点 3. 关键特征点 1. 特征点 利用神经网络进行对象定位,即通过输出四个参数值bx.by.bh和bw给出图片中对象的边界框 概括地说, ...

  8. [改善Java代码]覆写equals方法必须覆写hashCode方法

    覆写equals方法必须覆写hashCode方法,这条规则基本上每个Javaer都知道,这也是JDK API上反复说明的,不过为什么要这样做呢?这两个方法之间有什么关系呢?本建议就来解释该问题,我们先 ...

  9. java 重载 大于_详解java重载与覆写的区别

    很多同学对于overload和override傻傻分不清楚,建议不要死记硬背概念性的知识,要理解着去记忆. 先给出我的定义: 首先我们来讲讲:重载(Overloading) (1) 方法重载是让类以统 ...

最新文章

  1. android中DatePicker和TimePicker的使用
  2. Can't connect to local MySQL Server throught socket '/var/run/mysqld/mysqld.sock'(2)
  3. HTML中的转义字符 (转)
  4. spark on yarn :state: ACCEPTED一直 出现
  5. UA MATH567 高维统计专题2 Low-rank矩阵及其估计3 Rank RIP
  6. Android -ui控件
  7. 斜率优化(CDQ分治,Splay平衡树):BZOJ 1492: [NOI2007]货币兑换Cash
  8. 硬货 - 技术人也能轻松玩转公众号?正确姿势竟然是...
  9. python数据库操作sqlite_使用Python对SQLite数据库操作
  10. 用OpenSSL写一个简单的Server/Client程序:证书与私钥
  11. 重磅!苹果正式开源iOS内核源码!
  12. Flash Builder 4 正式版序列号
  13. 专业学习与职业发展之我见
  14. Windows蓝屏代码及解决方案最全合集
  15. 自动搜索关键词点击广告或网站,自动换ip实现过程
  16. 177.5. FAQ
  17. 【教程】通过lothelper实现短信接收测试
  18. 战双服务器维护,战双帕弥什维护到几点 战双帕弥什维护什么时候结束
  19. 攻下隔壁女神的路由器(转)
  20. 创业者在创业之初都需要做哪些准备工作呢

热门文章

  1. ELK7.8.1的Docker搭建过程
  2. C# HttpWebRequest GET HTTP HTTPS 请求
  3. 本人服务器遭受黑客长期攻击,特把这几天做的一些有用的安全方面总结出来,以方便以后查阅
  4. Python+Flask.0010.FLASK即插视图之自定义视图类及修饰器
  5. java获取classpath以外的路径
  6. CentOS6.4下安装TeamViewer8
  7. jboss-AS目录结构了解(资料摘取)
  8. Don't Laugh!I'm An English Book笔记(五)——面部词语大总结加补充
  9. 什么时候使用静态方法
  10. leetcode981. 基于时间的键值存储(treemap)