黑马程序员技术交流社区

标题: 静态方法为什么不能覆盖 [打印本页]

作者: 马静    时间: 2014-8-15 09:46
标题: 静态方法为什么不能覆盖
可以解释的复杂一些基础一些吗,我怕我还是听不懂,谢谢了
作者: fantacyleo    时间: 2014-8-15 10:13
覆盖是跟多态和动态绑定联系在一起的。你拿着父类引用调用一个方法,实际被调用的方法取决于父类引用指向的对象是哪一个(父类或某一个子类对象)。但静态方法本身不与任何对象相联系(虽然Java允许通过对象来调用静态方法,但某些OO语言,如Objective-C是不允许用对象来调用静态方法的),自然也就不会和多态相联系,谈不上覆盖了。
作者: wisely    时间: 2014-8-15 12:18
毕向东老师的视频里说:静态方法只能覆盖静态方法,我理解为可以覆盖,只是没什么意思吧了。
  1. class Fu{
  2.         public static void print(){
  3.                 System.out.println("这是父类");
  4.         }
  5. }

  6. class Zi extends Fu{
  7.         public static void print(){
  8.                 System.out.println("这是子类");
  9.         }
  10. }
  11. public class Demo{
  12.         public static void main(String[] args){
  13.                 Fu f=new Zi();
  14.                 f.print();
  15.                 Zi z=(Zi)f;
  16.                 z.print();
  17.         }
  18. }
复制代码


打印值看的是类类型变量,类类型变量是什么类型,就调用哪个方法。与new无关。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2