虽然,在B中你对A中的cheng()做了重载,但在Class1中你调用的还是cheng()不带参数的函数,这样并没有给A中的i赋值,所以 0* 11还为0

解决方案 »

  1.   

    但 "B bb =new B(5,6);" 不是已经给定i的值了吗 我认为其实m=bb.i * bb.j
    不知理解是否对
      

  2.   

    你new是B里的cheng(int i,int j)只是给B中的i和j赋值
    但并没有赋给A中的i啊
      

  3.   

    bb不是B的对象吗  它继承了A的i吗  bb.cheng()中要调用的i应当是bb.i  我真是有点不明白  谢谢你再帮我讲解讲解  season_fly(一望无际的鸟)
      

  4.   

    属性是不会继承的
    B中的i并不会覆盖A中的i,在调用A的方法且没有重载时,取得A中的i
    你应该注意这种情况。
      

  5.   

    虽然B继承了A,可是你在B中重新定义了i,相当于i成了局部变量,当你用B bb =new B(5,6);相当于给B中的那个i赋了值,但没有给A的i赋值
    如果想达到你要的结果的话,B应该这样写
    class B extends A{
       int k;
       B(int a,int k){
          i=a;
      this.k=k;
       }
       int cheng(int i,int k){
          return i*this.k;
       }
    }
      

  6.   

    "局部变量" 我明白了 要调用A类中的cheng()方法 其中的i与B中的i是不一样的  当B bb =new B(5,6)是设置了,B中的i,相对与A中的i是局部变量,其实没有定义A中的i,A中的i被B中的i隐藏了,bb.cheng()程序会去找A中的i,没有赋值给它。我这样理解对吗?
      

  7.   

    我当初理解继承的问题好象是把A中的可以被继承的成员变量和成员方法的代码copy到B类定义的代码中,这样理解似乎不对了
      

  8.   

    呵呵,我怀疑B是否能覆盖A的默认变量i。
    等我去查Spec...
      

  9.   

    我当初理解继承的问题好象是把A中的可以被继承的成员变量和成员方法的代码copy到B类定义的代码中,这样理解似乎不对了,对吗?
      

  10.   

    A中的"i"被定义为"有好的",B是看不到A的"i"的,所以在B中能定义另一个"i".
    如果将A中的"i"定义为protected或public,在B中则不能重新定义"i".