A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© I空空 中级黑马   /  2014-12-24 12:25  /  2695 人查看  /  22 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么静态只能被静态重写啊,虽然我也明白子父类中的静态方法都是随着类的加载而加载,在子类中重写父类的静态方法,我就偏偏把写成成员方法不可以吗,思路有点乱

22 个回复

倒序浏览
静态方法和private和 final修饰的方法不能被重写,在编译期间就已经确定调用了。
回复 使用道具 举报
静态和非静态的内存存储位置都不一样,你怎么重写,就像你准备来我家把我干掉,但是你进的我邻居家,找都找不到我,怎么干
回复 使用道具 举报
JAVA静态方法形式上可以重写,但从本质上来说不是JAVA的重写。因为静态方法只与类相关,不与具体实现相关,声明的是什么类,则引用相应类的静态方法(本来静态无需声明,可以直接引用),看下例子:
  1. class Base{
  2.         static void a( ){System.out.println("A");  }
  3.                  void b( ){System.out.println("B"); }
  4. }
  5. public class  Inherit extends Base{
  6.           static void a( ){System.out.println("C");  }
  7.                   void b( ){System.out.println("D"); }
  8.            public static void main(String args[]){
  9.                     Base b=new Base();
  10.                     Base  c=new Inherit();
  11.                     b.a();
  12.                     b.b();
  13.                     c.a();
  14.                     c.b();
  15.          }
  16. }
复制代码

以上输出的结果是:A
                           B
                           A
                           D
       非静态方法 按重写规则调用相应的类实现方法,而静态方法只与类相关。
       所谓静态,就是在运行时,虚拟机已经认定此方法属于哪个类。
专业术语有严格的含义,用语要准确."重写"只能适用于实例方法.不能用于静态方法.对于静态方法,只能隐藏(刚才的例子可以重写那只是形式上的 ,并不满足多态的特征,所以严格说不是重写)。
      静态方法的调用不需要实例化吧..  不实例化也就不能用多态了,也就没有所谓的父类引用指向子类实例.因为不能实例化 也就没有机会去指向子类的实例。所以也就不存在多态了。
回复 使用道具 举报
kerner 发表于 2014-12-24 12:42
静态方法和private和 final修饰的方法不能被重写,在编译期间就已经确定调用了。 ...

这样理解靠谱
回复 使用道具 举报
樊小乐 发表于 2014-12-24 14:52
JAVA静态方法形式上可以重写,但从本质上来说不是JAVA的重写。因为静态方法只与类相关,不与具体实现相关 ...

好详细。。赞
回复 使用道具 举报
这是很明显的区别, 对象存在前就存在了
回复 使用道具 举报
陈召 中级黑马 2014-12-24 21:22:44
8#
看到前排的解释很给力啊,很有毕姥爷的风范。
回复 使用道具 举报
嘿嘿。。。
回复 使用道具 举报
板凳解释得很详细了。一句话就是是静态优先于对象而存在~
回复 使用道具 举报
静态方法属于类方法。 成员方法是对象的方法。
回复 使用道具 举报
青衫禅客 发表于 2014-12-24 13:44
静态和非静态的内存存储位置都不一样,你怎么重写,就像你准备来我家把我干掉,但是你进的我邻居家,找都找 ...

这兄弟说中了
回复 使用道具 举报
静态方法不创建对象就可以被类名调用,其实静态方法不存在重写的。之所以要重写是因为创建了对象。
回复 使用道具 举报
楼上说的对               
回复 使用道具 举报
Honelyboy 发表于 2014-12-25 21:09
静态方法不创建对象就可以被类名调用,其实静态方法不存在重写的。之所以要重写是因为创建了对象。 ...

这个写的不错,静态方法优先于对象存在。。
回复 使用道具 举报
感觉学的太浅了,好像什么都会,又觉得什么都不会。
回复 使用道具 举报
kk8023 来自手机 中级黑马 2014-12-26 08:56:08
17#
靠谱,赞一个。。。。。来自: iPhone客户端
回复 使用道具 举报
enjoy 中级黑马 2014-12-26 10:41:21
18#
静态方法出现的早,类方法出现的晚。静态的可以不用实例化类直接使用
回复 使用道具 举报
青衫禅客 发表于 2014-12-24 13:44
静态和非静态的内存存储位置都不一样,你怎么重写,就像你准备来我家把我干掉,但是你进的我邻居家,找都找 ...

老毕特性暴露无遗
回复 使用道具 举报
这是静态的特性  就如非静态可以调用静态但反之不可以
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马