Java中父类的静态方法能否被子类重写

  • 前言
  • 一、final关键字和static关键字介绍
  • 二、问题产生及解决
    • 1.错误结论
    • 2.正确结论及验证
  • 总结

前言

今天在复习final关键字的时候突发奇想,在考虑static和final关键字既然可以修饰静态常量,那能否修饰一个方法呢?带着这个问题,我发掘到了一个疑问点:Java中父类的静态方法能否被子类重写?


一、final关键字和static关键字介绍

先来简单回顾下这两个关键字的具体含义
(1)final:可以修饰类、属性、方法和局部变量。
应用:①当不希望类被继承时,可用final修饰。
②当不希望父类的某个方法被子类重写(override)时,可用final修饰。
③当不希望类的某个属性的值被修改,可用final修饰。
④当不希望某个局部变量被修改,可用final修饰(也称为局部变量)。
(2)static:用来修饰静态变量和静态方法的关键字。
静态变量:该类所有对象共享的变量,在类加载时就已经初始化了,即使未创建对象,也能通过类名.静态变量名来访问。类变量的生命随着类的加载开始,随类的消亡而销毁。
静态方法:静态方法和普通方法都是随着类的加载而加载,将结构信息存储在方法区,静态方法中只能使用静态成员(静态变量和静态方法),不能使用和对象有关的关键字(如this和super)

二、问题产生及解决

1.错误结论

在复习完这两个关键字后,由于可以用static final修饰一个常量,也叫静态常量,因此我尝试了一下能否用这两个关键字修饰方法

代码如下(示例):

class a{public static void q(){}
}
class b extends a{public static final void q(){System.out.println("aaa");}
}

但这里Idea却警告:‘static’ method declared ‘final’,由于在前面学习静态方法时我尝试在子类中重写了父类的静态方法,结果竟然还输出了正确的重写方法,我也得到了一个错误的结论:静态方法可以重写。

public class Test {public static void main(String[] args) {bb b1 = new bb();b1.q();}
}
class aa{public static void q(){System.out.println("这是父类a的静态方法");}
}
class bb extends aa{public static void q(){System.out.println("这是子类b的静态方法");}
}

这里输出了这是子类b的静态方法,因此我得到了错误结论

2.正确结论及验证

实际上父类的静态方法能被子类继承,但不能被子类重写
为什么呢?因为如果静态方法q()被重写的话,那么使用多态向上转型,调用得到的输出也应该是这是子类b的静态方法

public class Test {public static void main(String[] args) {aa b1 = new bb();b1.q();}
}
class aa{public static void q(){System.out.println("这是父类a的静态方法");}
}
class bb extends aa{public static void q(){System.out.println("这是子类b的静态方法");}
}

但这里输出的是这是父类a的静态方法,这也证明了在子类bb中的静态方法q()根本没有重写父类中的静态方法。因此证明了父类的静态方法不能被子类重写。
这里再看下重写的概念:重写指的是根据运行时对象的类型来决定调用哪个方法,而不是根据编译时的类型。因此概念是不对的。
通过这个例子我也得出了另一个结论:对于一个类创建的对象,其静态方法的调用看的是该对象的编译类型,即"=“左边的类型(多态的知识)。而对于普通方法的调用,看的则是该对象的运行类型,即”="右边的类型。


总结

对于父类的静态方法不能被子类重写这个结论,可以理解为在类加载时就已经加载了,因此不能重写(个人理解,可能比较浅薄,希望大佬多多指正)。而子类中的q()方法根本不是重写父类的q()方法,即使子类中的静态方法与父类中的静态方法完全一样,也是两个完全不同的方法。

Java中父类的静态方法能否被子类重写?相关推荐

  1. 父类的静态方法能否被子类重写?

    父类的静态方法能否被子类重写? 不能.重写只适用于实例方法,不能用于静态方法,而子类当中含有和父类相同签名的静态方法,我们一般称之为隐藏. 静态变量和实例变量的区别? 静态变量存储在方法区,属于类所有 ...

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

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

  3. java中父类与子类的关系以及使用

    java中父类与子类的关系以及使用 在java中规定:一个父类可以有多个子类,但是一个子类只能有一个父类.子类可以通过extends关键字来继承父类.做个比较通俗的比喻,就像一个父亲可以有多个亲孩子, ...

  4. Java中父类强制转换为子类的可能

    之前徒弟问了一个问题, 在Java中, 父类对象到底能不能转换成对应的子类对象? 到底能不能, 今天就来说说这个问题, 先看下面一段代码: package cn.com.hanbinit.test; ...

  5. java中父类与子类有相同属性调谁?取决于左边

    java中父类与子类有相同属性调谁?答案是:取决于左边! 一. 在今天的继承复习当中,我有对继承中的属性有新的感悟------>子类继承父类,会继承父类的方法和属性,看下图: 从上图可以看出,即 ...

  6. java 父类强制转换为子类_[java]Java中父类强制转换成子类的原则

    Java中父类强制转换成子类的原则:父类型的引用指向的是哪个子类的实例,就能转换成哪个子类的引用. 例: public class Test { public static void main(Str ...

  7. 第32节:Java中-构造函数,静态方法,继承,封装,多态,包

    构造函数实例 class Cat{// 设置私有的属性 name private String name;// 设置name的方法public void setName(String Name) {t ...

  8. Java中父类的静态变量和静态方法的继承问题

    1.普通父类的静态变量和方法,可以通过子类的名称访问和调用 2.普通父类的静态变量和方法,可以通过子类的实例对象访问和调用 3.抽象父类的静态变量和方法,可以通过具体子类的名称访问和调用 4.抽象父类 ...

  9. java中父类创建子类的语法_Java 语言中,所创建的子类都应有一个父类。( )_学小易找答案...

    [判断题]一个类可以实现多个接口,接口可以实现"多重继承". ( ) [简答题]报价议价环节话术 [单选题]定义一个公有double型常量PI,哪一条语句最好?( ) [论述题]展 ...

最新文章

  1. 补丁更新选项的禁用与恢复
  2. 某网站高度加密混淆的javascript的分析
  3. mapreduce排序算法_MapReduce算法–二级排序
  4. Vue第二部分(2):组件的嵌套与通信
  5. php soap 下载文件,允许下载SOAP API响应(PHP)中的PDF文件get(作为附件)
  6. 图像处理四:霍夫变换
  7. PyQt4 UI设计和调用 使用eric6
  8. NTP服务器搭建教程
  9. 【PAT】A-1076:Forwards on Weibo(有向图的BFS遍历)
  10. 网络安全面试题及答案
  11. 数学建模线性规划实例及详细解答(MATLAB代码)
  12. jQuery控制video视频(快进,回退,倍速播放等)
  13. 使用按键精灵编写云顶之奕挂机脚本
  14. OSPF特殊区域(末梢区域、NSSA) 路由优化
  15. 让你快速逃离万能五笔的广告
  16. 100base-fx 单模/多模接口是什么意思
  17. android时间控制器,android UiAutomator长按实现控制按住控件时间的方法
  18. 使用CSS实现首行缩进效果
  19. 未来新一代计算机发展趋势有,未来计算机的发展趋势
  20. 【rk3399】AIO-3399J Linux_SDK Recovery按键无法进入Loader模式

热门文章

  1. 练习 ~黑马程序员匠心之作-第二阶段实战-P72~P83-通讯录管理系统
  2. 13视频监控-02视频监控画面-videopanel
  3. ibm urbancode example
  4. 数据结构之折半查找法(Binary Search)
  5. 兰州大学计算机录取分数线,985双一流大学 兰州大学2020年各省各专业录取分数线...
  6. IC设计高级012:afifo读数据用什么信号采样
  7. 好书《无毒一身轻—21天改变体质》- 总结
  8. {渡一教育}成哥HTML课程干货笔记整--8
  9. sina网页新闻小偷原理及源代码(java版) .
  10. 第七章:B视频-Entity FrameWork代码生成