本帖最后由 yz1311 于 2013-11-20 17:44:32 编辑

解决方案 »

  1.   

    楼主你这么想。子类中的i没声明,它哪里来的?如果不声明是不能直接用的。子类的i是从父类继承来的,他们这个i就是一个
      

  2.   

    这两个i是同一个变量!!
    你要看出区别在B里面加个i变量就看出来了
    public class A {
    public int i = 1; A() {
    System.out.println("A is created and i=" + i);
    }

    public static void main(String[] args) {
    B b = new B();
    b.printI();
    }
    }class B extends A {
    int i = 1;
    B() {
    System.out.println("B is created and i=" + i);
    } void printI() {
    i++;
    System.out.println("i=" + this.i + " " + super.i);
    }

    }
    A is created and i=1
    B is created and i=1
    i=2 1
      

  3.   

    子类继承了父类public的属性,其实子类和父类用同一个属性i。
    不行你把父类中的int i 注释掉,编译都会有问题。
    如果你在子类中,新建一个自己的属性public int i = 1;那就和父类分开了。
      

  4.   

    Hi,
    我来举一个例子,也许可以帮助楼主解决问题。
    我把类比喻箱子。现在有箱子A和B。
    当我们用new操作符的时候,就是拿箱子的行为。
    1.new A的情况,只要取箱子A的内容。
    2.new B的情况下,不但要取A的部分,还要取B的部分,组合成一个完整的内容,因为有继承关系。继承的关系不是说把A的代码全部都拷贝到B中,形成新的代码。而是理解当new B的时候,新的引用拥有父类和子类所有的行为。
      

  5.   

    明白楼主不明白的是什么了:
    B继承A,你创建了B的一个对象b,b实际上包括两部分p1,p2,p1是从A继承过来的,p2是自己的,this.i访问的是自己的i,因为p2中没有i,所以实际上访问的就是p1.i,super.i直接指定访问p1.i,所以this.i和super.i是同一个东西。
      

  6.   

    子类继承父类的属性,因此子类中拥有父类的属性i,
    这个属性i用this指针、super指针都可以访问。
      

  7.   

    那我问你,基类的i若是不变,你在子类没有声明i这个变量,为什么用了不报错?
    继承,也就继承了父类的方法(私有除外)和变量。在你的代码里父类和子类是共用i这个变量的,如果你想用子类的i->this.i。