你是否尝试过这样子调用?
//another class
public static void main(String args[]){
   Son.f();
}
看看这样子还能通过么?
我的结果是,也能通过!!!!!!!
我认为他的意思是static方法,根本不能够继承
这样子就没有覆盖的意思了

解决方案 »

  1.   

    static 的属性和方法都是不能覆盖的,因为static修饰的部分都是与对象无关的,只与类有关例如你上述的例子:
    如果你用
    Father f=new Son();
    f.f();//这里调用的还是Father.f()的方法,与直接用Father.f()调用的结果相同,因为f是Father类型的如果这样调用:
    Son s=new Son();
    s.f();//这里调用的就是Son.f()的方法了,因为s是Son类型的也就是说static修饰的部分是不能被覆盖、重写的
      

  2.   

    我只知道在interface里面不能定义static的方法。
      

  3.   

    public class A {
      public A(){
      }
        public static void fun()
        {      System.out.println("it is in A");    }
    }public class B extends A {
      public static void main(String[] agr)
      {
       A a = new B();
       a.fun();
      }  public static void fun() {    System.out.println("it is in B");  }
    }
    运行结果it is in A
      

  4.   

    类的static方法只要程序开始运行,便在内存中分配一块指向固定地址的函数指针。对该类的任何处理,比如继承或是实例化都不会影响这个固定的指针(即所谓静态)。
      

  5.   

    lizzz(不是程序员) 提供的程序再加入:
       B b = new B();
       b.fun();
    则出来就是:it is in B
      

  6.   

    我试了一下:
    package chap2;
    class Son extends Father
    {
    static void f()
    {
    System.out.println(1);
    }
    public static void main(String args[]){
        Son.f();
        Father.f();
    }}则输出为 
    1
    0
    而如果为:
    package chap2;class Son extends Father
    { public static void main(String args[]){
        Son.f();
        Father.f();
    }}
    则输出为:
    0
    0
    我认为这时Son默认是继承Father的。则说明static方法可以继承也可以重载!!!!
      

  7.   

    TO yangjuanli(珂儿)
    static的属性和方法是可以继承的,但不能重载,你那种不是重载!!!
      

  8.   

    强烈支持 nc201(Bricklayer) ( ) 信誉:120 的说法。
      

  9.   

    类的static方法不能被覆盖,
    其实继承类中同名,同参数的方式只是把父类的static方法隐藏起来了。
    Father f=new Son();
    f.f();//因为f是Father类型的,所以调用的还是Father.f()的方法,
          //与直接用Father.f()调用的结果相同,但如果这个方法不是static类型的话,就调用Son类中的方法,这是由于上溯造型既类
    的多形性特性造成的。
      

  10.   

    static方法在进行调用时不会使用动态绑定
      

  11.   

    呵呵,谁信誉高谁最可信,我的信誉不高也不低!覆盖和继承是有明显区别的,这是oo的基本常识!yangjuanli(珂儿) 的问题,那时地地道道的继承,静态方法是不能被覆盖掉的!这个问题特别好,我从来就没有注意过这个问题。首先要明确重写和覆盖的概念:覆盖是重写的一种在特殊条件的情况。覆盖一旦发生就不可逆的导致任何对当前对象的被覆盖方法的调用无论造型为父类还是子类对象,其实都是对当前对象被覆盖方法的调用。在java中继承中的非静态方法的重写都是动态绑定的覆盖,静态方法的重写不是覆盖!我同意以下论断: 回复人: wdong18(东东) ( ) 信誉:100  2004-06-16 21:24:00  得分: 0  
       类的static方法只要程序开始运行,便在内存中分配一块指向固定地址的函数指针。对该类的任何处理,比如继承或是实例化都不会影响这个固定的指针(即所谓静态)。
      
     根据《c++ completely reference》中所述,类的继承是分层的,继承树中的某个对象拥有其树中其他父对象的指针,尤其是在多重继承中就更加显而易见!这里举个简单例子:Son son = new Son();
    Father father = (Father)son;
    在java中继承中的重写都是动态绑定的覆盖,Father中定义了一个非Static方法 f();Son覆盖(重写)了该方法,上面的程序无论是son.f()还是father.f()其实调用的都是son.f().而在C++中除非声明f()是虚函数,否则上面的程序结果正好相反,son.f()就是son.f()而father.f()调用的是father.f(),;结合wdong18(东东)的见解,可以认为在c++和JAVA中对于继承树中的被覆盖的静态方法是一样的,就是静态函数指针,不可以被覆盖。java中的继承,类也同样是分层的。