因为在如果方法是静态的时候,其实obj.a()的写法不太正确,编译器会自动变成
A.a();//因为根本不需要obj变量!!!但是如果不是静态,则方法a会被覆盖

解决方案 »

  1.   

    因为在如果方法是静态的时候,其实obj.a()的写法不太正确,编译器会自动变成
    A.a();//因为根本不需要obj变量!!!但是如果不是静态,则方法a会被覆盖
      

  2.   

    没错,static方法是属于类的
    class A {
      public static void a() {
          System.out.println("super!");
      }
    }
    class TestStatic extends A {
      public static void a() {
          System.out.println("child");
      }
    这两个a方法完全没有关系.因为属于不同的类.obj.a();在执行的时候,由于obj是A类型,自然调用A.a().
    如果不是static,众所周知,派生类覆盖了父类的方法,这里应用了多态性.执行的是派生类的方法.
      

  3.   

    引用:这两个a方法完全没有关系.因为属于不同的类.obj.a();在执行的时候,由于obj是A类型,自然调用A.a().我后面new的是TestStatic()类,应该是调用TestStatic.a()吧?其实我也知道他会执行派身类的方法,但是加上static的时候它就不会执行派生类的方法!这个static在这里起了一个什么样的作用啊?
      

  4.   

    虽然 NEW后面是TestStatic()类,但 请你注意前面可是有 A obj = new TestStatic() 呀..
    还有 就是 TestStatic()类 继承的始终是类A()的内容的,只不过 你如果加上static,会把 函数a()(形象地说就是)"固定化"了~
      

  5.   

    也就是说如果我加上static的话,子类里面的a()方法就没有了作用,是不是这个意思啊?