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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 她只是过客 中级黑马   /  2014-8-30 18:04  /  1583 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么静态只能覆盖静态和被静态覆盖?

6 个回复

倒序浏览
你想想静态是什么时候被加载进内存的 就明白了
回复 使用道具 举报
class Super{   
   static String greeting(){   
      return "Good night";   
  }   
  
  String name(){   
     return "Richard";   
  }   
}   
  
class Sub extends Super{   
   static String greeting(){   
     return "Hello";   
  }   
  
  String name(){   
     return "Dick";   
  }   
}   
  
class Test{   
  public static void main(String[] args){   
    Super s = new Sub();   
    System.out.println(s.greeting()+","+s.name());   
  }   
}  

运行结果:Good night  Dick
          父类的静态方法+子类的非静态方法
回复 使用道具 举报
夜半风 发表于 2014-8-30 19:53
你想想静态是什么时候被加载进内存的 就明白了

问题是静态覆盖和被覆盖是双向都必须是静态  ,跟先后加载没有关系吧,
回复 使用道具 举报
旅行。 发表于 2014-8-30 19:56
class Super{   
   static String greeting(){   
      return "Good night";   

你这个我在网上看过了,这是说方法被覆盖静态被隐藏了,再看看问题吧
回复 使用道具 举报
静态变量和方法都是存储在静态方法区。是优先于对象存在,类加载的时候静态就进入了内存,非静态是创建对象的时候才进内存,所以静态的只能被静态覆盖!如果没创建对象,也就是非静态的成员没有进内存,怎么能覆盖静态呢?
回复 使用道具 举报
学习了,!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马