复写 base class 中的static method 时只能 复写为 static 的也就是说 static 与 非static 的 method 之间不能互相复写

解决方案 »

  1.   

    class Base{
    static public int i=1;

    static public void second(){
    System.out.println("second");
    }
    }
    class Derived extends Base{
    static public int i=2;
    static public void second(){
    System.out.println("derived second");
    }
    }
    public class test{
    public static void main(String[] args){
    Base aa=new Derived();
    aa.second();
    System.out.println(aa.i);
    }
    }
    但是怎么解释这段代码的输出结果呢?second
    1
      

  2.   

    Base aa=new Derived();aa.second(); //Base
    System.out.println(aa.i); //Base((Derived)aa).second();  //Derived
    System.out.println(((Derived)aa).i);  //Derived
      

  3.   

    为什么加了static   aa.i;调用的是base
    而 没有static (public int i;)  aa.i; 调用的却是derived