一个OOP问题,请教下。。答案是18
父类:
public Fa()
{
add(1);
}
public void add(int i)
{
count +=1*i;
}
public void prin()
{
System.out.println(this.count);
}
}
子类:
public class SubClass extends Fa{
int count;
public SubClass()
{
add(2);
}
public void add(int i)
{

count +=i*2;
}
public void prin()
{
System.out.println(this.count);
}
}主类中输出: public static void main(String[] args) {
// TODO Auto-generated method stub
SubClass Sb= new SubClass();
Sb.add(6);
Sb.prin();
}这个是怎么算出18的。。郁闷

解决方案 »

  1.   


    SubClass Sb= new SubClass();
    因为子类继承父类所以先执行父类的ADD方法
    public void add(int i) 

    count +=1*i; 这时count= 1*6 = 6
    然后调用子类ADD(6)
    public void add(int i) 
    { count +=i*2; 
    } 这时count = count +i*2   = 6+12 = 18
    然后调用print语句的
    count = 18
     
      

  2.   

    父类打漏了一行:
    public class Fa{接下来的是构造方法
      

  3.   

    SubClass Sb= new SubClass(); 
    我看了下,你的子类没有构造器。用了父类的构造器!
    你只要随便写个构造器,结果就会是你想要的12······
      

  4.   

    先是父类初始化: 注意初始化的add已经被overload,是子类的add: count=0+1*2=2
    子类初始化: count=2+4=6
    子类add(6): count=6+6*2=18
      

  5.   

    1楼错,父类的add从来没有被执行.
    3楼错,SubClass有初始化方法并被执行.
      

  6.   

    晕倒~SubClass Sb= new SubClass(); 
    子类初始化,调用自己的构造方法;其中又调用了父类的构造方法;此时count=6Sb.add(6); 
    调用sb对象的add方法,加2*6此时count=18