java构造器的执行过程是怎样的???

来源:百度知道 编辑:UC知道 时间:2024/05/20 04:07:31
public class Base {
protected String s="class:Super";

public Base(){
System.out.println("Super!!");
}
public int Add(int a,int b){
return a+b;
}
static public int minus(int a,int b){
return a-b;
}
青铜骑士(86188364) 14:51:59
public class Sub extends Base {
protected String s = "class:Sub";

public Sub(){
System.out.println("Sub!!");
}
public float Add(float a, float b) {
return a + b;
}

public int Add(int a, int b) {
return 2 * a + b;
}
青铜骑士(86188364) 14:52:11
public class ClassTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Base perent=new Base();
System.out.println(perent.s+"\n"+perent.Add(5,4)+"\n"+perent.minus(5,4));
Base son=new Sub();
System.out.println(son.s+"\n"+son

1.son.Add(5.4f,4.5f)这句为什么会报错???
因为Base son=new Sub(); 虽然从表面上看son好像是实例化了Sub。实际上它仍然是一个Base对象!因为Base son这句话就决定了他的归属。所以son.Add(5.4f,4.5f)方法实际上是调用了base中的ADD(float,float),而它是没有定义的,当然会出错了。
2.Base perent=new Base()和Base son=new Sub()有什么不同???
解释同上。
3.为什么perent.Add(5,4)的结果是9,而son.Add(5,4)的结果是14?
因此Base中的Add(int,int)方法被Sub中Add(int,int)的覆盖了,所以
perent.Add(5,4)调用的是Base中的Add方法所以结果是5+4=9
son.Add(5,4)调用的是Sub中的Add方法所以结果是5*2+4=14