A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 沈艳南 中级黑马   /  2013-5-16 13:00  /  1267 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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[i].area());
                }// TODO Auto-generated method stub

        }
       
               
               
        }
       

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?

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1

查看全部评分

1 个回复

倒序浏览
这句赋值代码
s[2] =new Rect(new Rect(12.0,4.0));
调用的是下面这个构造函数
Rect(Rect r){
                super(r);
        }
然后  super(r);调用的是
Shap(Shap s){
                w = s.w;
                h = s.h;
        }
所以结果就是
w=12.0
h=4.0
输出s[2].area()就是 getw()*geth(),
也就是12.0*4.0
结果就是48.0了

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马