簡體   English   中英

是否可以在超類類型的數組中包含子類數組

[英]is it possible to have an array of subclasses in an array of type superclass

假設一個人有一個超類的形狀,兩個子類是正方形和三角形。 然后可以制作一個包含正方形和三角形對象的類型形狀數組嗎? 如果是這樣,這樣做的最佳做法是什么?

下面我想知道的例子是可能的:

class shapes{
    protected int linear_scale_factor = 4;
}

class square extends shapes {
    int area;
    int scaled_area = area * linear_scale_factor**2;
}

class triangle extends shapes {
   int area;
   int scaled_area = area * linear_scale_factor**2;

}

class main{
   shapes[] shapes_arr = new shapes[8];
   shapes_arr[0] = new square(34);
}

編輯

class shapes{
    protected int linear_scale_factor = 4;
    protected int scaled_area ;
}

class square extends shapes {
    int area;
    int scaled_area = area * linear_scale_factor*linear_scale_factor;
    
    public square(int i){
        area = i;
    }
}

class triangle extends shapes {
   int area;
   int scaled_area = area * linear_scale_factor*linear_scale_factor;

   public triangle(int i){
       area = i;
   }

}

class main{
    public static void main(String[] args) {
        shapes[] shapes_arr = new shapes[8];
        shapes_arr[0] = new square(34);
        shapes_arr[1] = new triangle(12);
        shapes_arr[2] = new square(453);


        for(shapes shape : shapes_arr){
            System.out.println(shape.scaled_area);
        }
    }

}

像這樣的東西不起作用,為什么?

您有兩個類是形狀 class 的子類。 這兩個類覆蓋了scaled_area字段。 這意味着通過shape_arr對 scaled_area 的任何引用正在調用尚未分配任何值的超類字段。 此外,當存儲在字段區域中的值是默認值(0 表示 int)時,您在聲明期間計算scale_area的值。 這是一個可行的重新排列:

class shapes{
    protected int linear_scale_factor = 4;
    protected int scaled_area ;
}

class square extends shapes {
    int area;
    public square(int i){
        area = i;
        scaled_area = area * linear_scale_factor*linear_scale_factor;
    }
}

class triangle extends shapes {
   int area;
   

   public triangle(int i){
       area = i;
       scaled_area = area * linear_scale_factor*linear_scale_factor;
   }

}

class main{
    public static void main(String[] args) {
        shapes[] shapes_arr = new shapes[8];
        shapes_arr[0] = new square(34);
        shapes_arr[1] = new triangle(12);
        shapes_arr[2] = new square(453);


        for(shapes shape : shapes_arr){
            System.out.println(shape.scaled_area);
        }
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM