静态(static)方法重写(override)

转载 2016年06月02日 09:27:17

父类的普通方法可以被继承和重写,不多作解释,如果子类继承父类,而且子类没有重写父类的方法,但是子类会有从父类继承过来的方法。

静态的方法可以被继承,但是不能重写。如果父类中有一个静态的方法,子类也有一个与其方法名,参数类型,参数个数都一样的方法,并且也有static关键字修饰,那么该子类的方法会把原来继承过来的父类的方法隐藏,而不是重写。通俗的讲就是父类的方法和子类的方法是两个没有关系的方法,具体调用哪一个方法是看是哪个对象的引用;这种父子类方法也不在存在多态的性质。《Java编程思想》中这样提到“只有普通的方法调用可以是多态的”。下面代码为例:

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public class StaticTest  
  2. {  
  3.     public static void main(String[] args)  
  4.     {  
  5.         M m = new N();  
  6.         m.output();  
  7.     }  
  8. }  
  9.   
  10. class M  
  11. {  
  12.     public static void output()  
  13.     {  
  14.         System.out.println("M");  
  15.     }  
  16. }  
  17.   
  18. class N extends M  
  19. {  
  20.     public static void output()  
  21.     {  
  22.         System.out.println("N");  
  23.     }  
  24. }  

上面执行的结果是“M”,也就是是M类型的引用调用的,如果修改main方法中的代码:

N n = new N();

n.output();

那么执行的结果是“N”,也就是N类型的引用调用的。

静态的方法不能覆写,也不能被重写。总之,静态的没有重写!!!

相关文章推荐

C#中修饰符用法“virtual(虚拟函数)、override(函数复写)、static(静态函数)、abstract(抽象函数)、sealed(密封函数)”

1、virtual用于修饰方法、属性、索引器或者事件声明,并使它们可以在派生类中被重写。virtual不能与static、abstract、private或者override修饰符一起使用。 声...

java 静态方法不能被override

先上代码,看结果分析:  父类:class Base { public static int a = 10; public int b = 20; static { System.out.p...

Java中的Static块与静态方法

  • 2012年06月01日 17:14
  • 2KB
  • 下载

”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?

static关键字在《java编程思想》中有这样一段话形容static关键字: 通常,我们创建类时会指出那个类的对象的外观与行为。除非用new 创建那个类的一个对象,否则实际上并 未得到任何...
  • andy_px
  • andy_px
  • 2016年03月02日 16:44
  • 6267

【Stackoverflow好问题】重写(Override)equlas和hashCode方法时应考虑的问题

问题 重写(Override)equlas和hashCode方法时应考虑哪些问题? 精华回答 理论上讲(偏程序语言和数学层面) equals() 定义了对象的相等关系(自反性、对称性、传...

接口,抽象类,虚方法,重写(interface,abstract class,virtual function,override)

1.抽象类和虚方法的区别(abstract,virtual function) 看到抽象和虚这两词真的觉得有点抽象,有点犯迷糊.其实这两者还是很容易区分的. 1.abstract可以修饰class...

二、类的继承、public、protected、private、parent、重写override、最终类和最终方法

一、类的继承 简单定义:某个类A具有某些特征,另一个类B,也具有A类的所有特征,并且还可能具有自己的更多的一些特征,此时,我们就可以实现:B类使用A的特征信息并继续添加自己的一些特有特征信息。 基...
  • HRaymon
  • HRaymon
  • 2015年01月31日 18:35
  • 1080

C#中子类对父类中虚方法的处理有重写(override)和覆盖(new),他们有什么区别?

在子类中用override重写父类中用virtual申明的虚方法时,实例化父类调用该方法,执行时调用的是子类中重写的方法; 如果子类中用new覆盖父类中用virtual申明的虚方法时,实例化父类调用该...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:静态(static)方法重写(override)
举报原因:
原因补充:

(最多只允许输入30个字)