class Father
{
static int i=1;
}
public class Test extends Father
{
  public static void main(String[] args)
  {
   i=2;
    System.out.println(i);
  }
}上面这个一切正常;
class Father
{
static int i=1;
}
class Son extends Father
{
i=2;  //错误提示 需要<标识符>
}
public class Test extends Son
{
  public static void main(String[] args)
  {
   i=3;
    System.out.println(i);
  }
}这两个段代码有区别吗?

解决方案 »

  1.   

    因为上面的i=2在方法里。
    下面的是son类的成员当然要加类型了。
      

  2.   

    class Son extends Father
    {
        i=2;  //错误提示 需要<标识符>
    }
    这个类中的i,其所在位置(没有在方法内),决定它是作为Son类的类成员变量对待的,
    所以,编译器并不认为它是引用了父类的静态变量,而是认为你需要声明一个新变量。正确的用法:
    class Son extends Father
    {
        static{i=2;}  //错误提示 需要<标识符>
    }而:
    public class Test extends Father
    {
      public static void main(String[] args)
      {
          i=2;
        System.out.println(i);
      }
    }对i的引用处于一个方法中,所以可以引用类的静态变量。
      

  3.   

    son类里的i 是继承自father的,可以直接使用呀,
      

  4.   

    很明显类Song中的i用的是static int i这个定义,两者之间是透明的,静态方法只能调用静态变量