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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 傲鸽 中级黑马   /  2013-6-23 22:20  /  1107 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Super_Class 于 2013-6-24 18:22 编辑
  1. package cn.itcast.test;

  2. public class Test04 {
  3.         public static void main(String[] args) {
  4.                 Shap s[]=new Shap[3];
  5.                 s[0]=new Rect(8,0);
  6.                 s[1]=new Rect(5.0,6.0);
  7.                 s[2]=new Rect(new Rect(12.0,4.0));
  8.                 for (int i = 0; i < s.length; i++) {
  9.                         System.out.println("s["+i+"]area="+s[i].area());
  10.                 }
  11.                
  12.         }
  13.                
  14. }

  15. abstract class Shap{
  16.         private double w,h;
  17.         
  18.         Shap(double i) {
  19.                 w=h=i;
  20.         }
  21.         
  22.         Shap(double i,double j){
  23.                 w=i;
  24.                 h=j;
  25.         }
  26.         
  27.         Shap(Shap s){
  28.                 w=s.w;
  29.                 h=s.h;
  30.         }
  31.         
  32.         double getw(){
  33.                 return w;
  34.         }
  35.         
  36.         double geth(){
  37.                 return h;
  38.         }
  39.         
  40.         abstract double area();
  41. }

  42. class Rect extends Shap{
  43.         Rect(double i){
  44.                 super(i);
  45.         }
  46.         
  47.         Rect(double i,double j){
  48.                 super(i,j);
  49.         }
  50.         
  51.         Rect(Rect r){
  52.                 super(r);
  53.         }
  54.         
  55.         double area(){
  56.                 return getw()*geth();
  57.         }
  58.         
  59. }
复制代码
继承这里总有点懵,请问这个输出结果是什么,并写一下分析过程,要详细些,谢谢

评分

参与人数 1技术分 +1 收起 理由
Super_Class + 1

查看全部评分

3 个回复

倒序浏览
  1. public class Demo1 {
  2.         public static void main(String[] args) {
  3.                 Shap s[]=new Shap[3];//1,定义一个3个元素的数组 里面元素是shap类型的
  4.                 s[0]=new Rect(8,0);         //2,第一个元素是shap子类Rect的,多态的形式
  5.                 s[1]=new Rect(5.0,6.0);         //5,第二个元素了,一样的步骤,w=5.0 , h=6.0
  6.                 s[2]=new Rect(new Rect(12.0,4.0));         //6,第三个元素, 先有Rect的对象,w=12.0 , h=4.0
  7.                                                                                                          
  8.                 for (int i = 0; i < s.length; i++) {
  9.                         System.out.println("s["+i+"]area="+s[i].area());
  10.                 }                                                                                        //9,循环i=0,1,2三次. s[i]是个对象
  11.                                                                                                         //s[i].area()是调用Rec里面的area方法,也是覆写了父类的
  12.                                                                                                         //返回double类型的.
  13.                                                                                                         //i=0时,w=8.0  h=0.0   打印s[0]area=0.0
  14.                                                                                                         //i=1时,w=5.0  h=6.0   打印s[0]area=30.0
  15.                                                                                                         //i=2时,w=12.0 h=4.0   打印s[0]area=48.0
  16.                
  17.         }
  18.                
  19. }

  20. abstract class Shap{
  21.         private double w,h;
  22.         
  23.         Shap(double i) {
  24.                 w=h=i;
  25.         }
  26.         
  27.         Shap(double i,double j){           //4,w=8.0  h=0.0,
  28.                 w=i;
  29.                 h=j;
  30.         }
  31.         
  32.         Shap(Shap s){
  33.                 w=s.w;                                  //8,这里了,w=12.0 ,h=4.0
  34.                 h=s.h;
  35.         }
  36.         
  37.         double getw(){
  38.                 return w;
  39.         }
  40.         
  41.         double geth(){
  42.                 return h;
  43.         }
  44.         
  45.         abstract double area();
  46. }

  47. class Rect extends Shap{
  48.         Rect(double i){
  49.                 super(i);                         
  50.         }
  51.         
  52.         Rect(double i,double j){         //3,new Rect(8,0)调用父类的构造方法
  53.                 super(i,j);
  54.         }
  55.         
  56.         Rect(Rect r){                          //7,作为对象r传入这里.
  57.                 super(r);
  58.         }
  59.         
  60.         double area(){
  61.                 return getw()*geth();
  62.         }
  63.         
  64. }
复制代码
这只是我自己的理解啊.我也是菜鸟,觉得关系挺乱的.有点晕.只是我的个人理解.巧合的是跟结果一致~~
坐等大神回复~
互相学习哈!

评分

参与人数 1技术分 +1 收起 理由
Super_Class + 1

查看全部评分

回复 使用道具 举报 1 0
创建一个数组里面存储了3个元素,调用Rect类的构造方法并赋值给数组的三个元素。最后打印长方形的面积。over!

回复 使用道具 举报
首先结果是:
s[0]area=0.0
s[1]area=30.0
s[2]area=48.0
解释:

public class Test04 {
       public static void main(String[] args) {
               Shap s[]=new Shap[3];//定义了一个抽象类数组
               s[0]=new Rect(8,0);//给第一个数组元素赋值  解释参考2
               s[1]=new Rect(5.0,6.0);   //给第二个数组元素赋值  解释参考3
               s[2]=new Rect(new Rect(12.0,4.0));  //给第三个数组元素赋值  解释参考4
                for (int i = 0; i < s.length; i++) {
                       System.out.println("s["+i+"]area="+s[i].area());//调用数组元素中的方法并且输出其值
               }         
       }
}
1.s是抽象类Shap的数组,类Rect继承抽象类Shape,
2.s[0]=new Rect(8,0);这是实力化了一个Rect类的对象  调用的是含有两个参数的构造函数,就是把数值8和0赋给了 s[0]的w和h    s[0].area());方法结果是:8*0=0;
3.  s[1]=new Rect(5.0,6.0);   和解释2一样 s[0].area());方法结果是:5.0*6.0=30.0
4.s[2]=new Rect(new Rect(12.0,4.0));  调用的是参数是shap对象的构造函数参数是其子类的对象,把子类对象的属性值赋给了s[2]元素的属性  new Rect(12.0,4.0));  调用的是参数是两个的构造函数
结果是:12.0*4.0=48.0
希望对你有帮助  
3.

评分

参与人数 1技术分 +1 收起 理由
Super_Class + 1

查看全部评分

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