最近在做游戏的过程中发现一种这样传递对象的方式,以前几乎都是通过构造函数和new对方 产生的对象
现在如下:public abstract class A { B b;
public abstract void show();
}public abstract class B extends A{ A a ;
public B() {
this.initController(); //初始化,其顺序不能和下面的那句位置相反,否则空指针
a.b = this; //这句极为模糊,为什么可以通过这样传递对象引用喃
}
public abstract void initController();}public class C extends A{ public void show() {
System.out.println("C--show");
}
}public class D extends B{
public static void main(String[] args) {
new D();
} public void initController() {
this.a = new C();
//this.b = new C();
this.show(); //结果D--show
this.a.show(); //结果C--show
}
public void show() {
System.out.println("D--Show");
}
}
哪个高手帮我分析下 那些比较难的几句啊.感谢了小弟:
现在如下:public abstract class A { B b;
public abstract void show();
}public abstract class B extends A{ A a ;
public B() {
this.initController(); //初始化,其顺序不能和下面的那句位置相反,否则空指针
a.b = this; //这句极为模糊,为什么可以通过这样传递对象引用喃
}
public abstract void initController();}public class C extends A{ public void show() {
System.out.println("C--show");
}
}public class D extends B{
public static void main(String[] args) {
new D();
} public void initController() {
this.a = new C();
//this.b = new C();
this.show(); //结果D--show
this.a.show(); //结果C--show
}
public void show() {
System.out.println("D--Show");
}
}
哪个高手帮我分析下 那些比较难的几句啊.感谢了小弟:
等号两边对象类型处于兼容范围之内 严格说来 都是Type B
不能颠倒是因为使用a时不能为空
况且访问控制权限也允许 b成员是package private的
this.initController(); //主要是由于this.a = new C(); 和A a;
a是null;