黑马程序员技术交流社区

标题: 构造函数相关问题 [打印本页]

作者: 沈艳南    时间: 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