父类的静态方法能不能被子类重写

首先答案是不能!

这个问题有两个关键字,一个是静态方法,一个是重写。

我们来先说说重写,可能很多初学的朋友分不清重写和重载的区别。

重写:子类继承父类后,定义了一个和父类中的一模一样方法,这个一模一样是值方法名和参数的定义一模一样。这时候子类要实现这个方法,就称为对父类方法的重写。

重载:子类继承父类后,定义了一个和父类中相同名字的方法,但是参数不一样(必须),实现也不同(可选),这就是重载。


静态方法:java中,static修饰符修饰的方法就是静态方法。所谓静态就是指:在编译之后所分配的内存会一直存在(不会被回收),直到程序退出内存才会释放这个空间。

在java中,所有的东西都是对象,对象的抽象就是类,对于一个类而言,如果要使用他的成员(类中的属性,方法等),一般情况下,必须先实例化对象后,通过对象的引用才能访问这些成员。

但是,如果要使用的成员使用了static修饰,就可以不通过实例化获得该成员。

就比如,现在有个桌子,我想吃苹果,一般情况下,我需要先拿个盘子(对象的实例化)去装苹果才能吃到苹果,现在有个苹果直接放在桌子上(用static修饰过的静态方法),这样我就可以直接从桌子上拿到苹果。可能大家会有疑问,既然静态方法(能不通过实例化就使用成员)这么方便,为什么不都使用静态方法。

大家回到static这个修饰符的功能定义:所谓静态就是指:在编译之后所分配的内存会一直存在(不会被回收),直到程序退出内存才会释放这个空间。

java的回收机制会定时的回收已经使用过的对象的内存来释放内存给应用程序。如果全部都是静态变量和静态方法,内存都被占用了,java程序哪里还有运行的空间呢?就好比,你回家就看到桌子上摆满了苹果,那你买的梨子就没地方放了。


现在回到题目中来,父类的静态方法能不能被重写。答案是不能。

因为静态方法从程序开始运行后就已经分配了内存,也就是说已经写死了。所有引用到该方法的对象(父类的对象也好子类的对象也好)所指向的都是同一块内存中的数据,也就是该静态方法。子类中如果定义了相同名称的静态方法,并不会重写,而应该是在内存中又分配了一块给子类的静态方法,没有重写这一说。(最后一句话是自己理解,不知道说的对不对,欢迎大家批评指正)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,512评论 18 399
  • 1 面向对象No6 面向对象 OO Object Oriented 编程时以对象为单元,封装数据和逻辑,以此提...
    征程_Journey阅读 4,900评论 0 2
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 7,618评论 0 11
  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 5,427评论 0 3
  • 蓝鸥(www.lanou3g.com)是一家集产、学、研、创为一体的综合性移动互联网研发培训机构,致力于iOS开发...
    蓝鸥3G阅读 3,897评论 0 1

友情链接更多精彩内容