黑马程序员技术交流社区
标题:
构造函数相关问题
[打印本页]
作者:
沈艳南
时间:
2013-5-16 19:06
标题:
构造函数相关问题
本帖最后由 沈艳南 于 2013-5-20 00:50 编辑
public class Test2 {
public static void main(String[] args) {
Shap s[] = new Shap[3];
s[0] =new Rect(8,0);
s[1] =new Rect(5.0,6.0);
s[2] =new Rect(new Rect(12.0,4.0));
for(int i=0;i<s.length;i++){
System.out.println("s["+i+"]area="+s
.area());
}
}
}
abstract class Shap{
private double w,h;
Shap(double i){
w=h=i;
}
Shap(double i,double j){
w = i;
h = j;
}
Shap(Shap s){
w = s.w;
h = s.h;
}
double getw(){
return h;
}
double geth(){
return w;
}
abstract double area();
}
class Rect extends Shap{
Rect(double i){
super(i);
}
Rect(double i,double j){
super(i,j);
}
Rect(Rect r){
super(r);
}
double area(){
return getw()*geth();
}
}谁能告诉我为什么s[2]输出的是48?
作者:
long
时间:
2013-5-16 19:31
本帖最后由 long 于 2013-5-16 21:05 编辑
public class Test2 {
public static void main(String[] args) {
Shap s[] = new Shap[3];
s[0] =new Rect(8,0);
s[1] =new Rect(5.0,6.0);
s[2] =new Rect(new Rect(12.0,4.0)); /**该行语句可替换成 Rect r = new Rect(12.0, 4.0); s[2] = new Rect(r); s[2]其实是r的副本,尽管它们是两个不同的对象,但它们的字段值是相同的。楼主应该明白r.w = 12.0, r.h = 4.0, 因此s[2].w = 12.0, s[2].h = 4.0。s[2].area() = s[2].w * s[2].h = 12.0 * 4.0 = 48。所以s[2]输出的是48. */
for(int i=0;i<s.length;i++)
System.out.println("s["+i+"]area="+s
.area());
}
}
作者:
殇_心。
时间:
2013-5-19 11:43
如果问题已解决,请及时修改分类,否则继续提问,谢谢合作!
作者:
刘胜寒
时间:
2013-5-19 21:54
楼主可以结贴了。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2