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

来源:互联网 发布:2016天猫双11数据分析 编辑:程序博客网 时间:2024/05/28 18:43

我们通过下面代码来测试:class Parent{static void a(){System.out.println("Parent");}}class Children extends Parent{ static void a(){System.out.println("Children");}} class Main {public static void main(String[] args) {Parent parent = new Parent();// (1)Parent children = new Children();  //(2)Children children1 = new Children();  //(3)parent.a();children.a();children1.a();}}测试结果

Parent
Parent
Children


代码(1),(3)测试如常,很容易理解,看似并没有什么不同

而代码(2)显示的结果却是Parent。

按照常理来说应该是Children,为什么会是Parent?


这是因为用static修饰的方法不能被重写,代码(3)测试结果之所以会是Children是因为它相当于自己定义了一个a()函数,注意这个函数并不是Parent里的a()函数,(就像 现实中两个名字相同的学生一样,他们只是名字相同并非同一个人),这就解释了为什么代码三会的到Children而红色代码二会得到Parent。


1 0
原创粉丝点击