日期:2014-05-20  浏览次数:20676 次

细细讲解下啊,越细越好,举例子说明就更好了
class A{
public void f(int x){
System.out.println(x);
}
public void s(D d){
System.out.println("哈哈");
}
}
class D{

}
class B extends A{
public B(int y,D d){
f(y);
s(d);
}
}
class C{
public static void main(String[] args){
B b = new B(2,new D());
}
}
为什么B的构造方法可以直接把形参传给f和s方法啊,为啥不用this.的形式,如果B类的构造方法的形参是一个类对象,如果接住这个传过来的对象啊,也就是说一个方法的形参是数值型的时候可以用this.的形式接住传过来的数,那如果形参是类对象或者是引用数据类型的呢?怎么接住啊

------解决方案--------------------
1.为什么B的构造方法可以直接把形参传给f和s方法啊
B的构造函数里面声明了变量y,这个是局部变量D d是定义了个d对象 生命周期在花括号内 自然能用了啊
this. 的方法来调用类的成员变量这个this是指当前类创建的实例对象,即B的实例对象,B对象的成员变量没有y 
和d自然不能用 即使有意义也不对啊

2.在JAVA中有值传递和引用 对象都是引用的 你可以理解为指针 是访问地址的 值传递 会创建个副本 有额外的开销
------解决方案--------------------
Java code

class A {
    protected D dd;
    public void f(int x) {
        System.out.println(x);
    }

    public void s(D d) {
        System.out.println("哈哈");
    }
}

class D {

}

class B extends A {
    
    private int yy;
    public B(int y, D d) {
        super.dd =d;//想怎么写就怎么写。this.dd=d也可以。父类方法必须protected以上,刚才我试验了,否则用用getset了
        this.yy = y;
        this.f(y);//this.f(yy);
        this.s(d);//this.s(dd);
    }
}

public class C {
    public static void main(String[] args) {
        new B(2, new D());
    }
}