2017-07-21 11 views
1

私は抽象メソッド抽象int型エリア()抽象クラス形状、他の三つのクラスとこれらのクラスのオーバーライドされた面積法に拡張Shapeクラスを作成しようとすると、Javaで初心者ですが面積を計算し、intを返しています値と私はShapeクラスの配列に格納したい。intをカスタムクラスの型にキャストできますか?もしそうなら、どうですか?

import java.util.Scanner; 
abstract class Shape{ 
abstract int area(); 
} 

class Ractangle extends Shape { 
    private int length,width; 
    public Rectangle(){ 
     System.out.println("Enter length rectangle "); 
     this.length = Test.scan.nextInt(); 
     System.out.println("Enter width rectangle "); 
     this.width = Test.scan.nextInt(); 
    } 
    public int area(){ 
    return length*width; 
    } 
} 

class Square extends Shape{ 
    private int side; 
    public Square(){ 
     System.out.println("Enter side square "); 
     this.side = Test.scan.nextInt(); 
    } 
    public int area(){ 
     return side*side; 
    } 
} 
class Parlellogram extends Shape{ 
    private int base,height; 
    public Parallelogram(){ 
     System.out.println("Enter base parallelogram"); 
     this.base = Test.scan.nextInt(); 
     System.out.println("Enter height parallelogram "); 
     this.height = Test.scan.nextInt(); 
    } 
    public int area(){ 
     return base*height; 
    } 
} 
class Test{ 
    public static Scanner scan; 
    public static void main(String[] args){ 
     scan = new Scanner(System.in); 
     Rectangle rect = new Rectangle(); 
     Square sq = new Square(); 
     Parallelogram prlg = new Parallelogram(); 

     Shape[] shapeArray = {rect.area(), sq.area(), prlg.area()}; //error here 

     //shapeArray[0] = rect.area(); 
     //shapeArray[1] = sq.area(); 
     //shapeArray[2] = prlg.area(); 
    } 
} 

エラー:互換性のない型:理由はarea()方法である

int[] shapeArray = {ract.area(),sq.area(),prlg.area()}; 

配列データ型を変更intは、それ自体が問題int cannot be converted to Shapeについて語る

答えて

2

おそらくこれを書いているのでしょうか?

int[] shapeArray = {ract.area(), sq.area(), prlg.area()}; 

またはtihs?シェイプの面積を計算する場合

Shape[] shapeArray = {ract, sq, prlg}; 

、あなたは、もはやShapeが、intを持っていません。

1

例外を形状に変換することはできませんタイプintの戻り値はシェイプではありません。

1

Javaは静的型付けされた言語です。つまり、の値をShapeの配列の中に格納することはできません。 問題を解決するためには、あなたが整数の配列を作成する必要があります

int[] shapeArray = { ract.area(), sq.area(), prlg.area() }; 
0

をごShape[]は、形状の配列である(ただshapesshapeArrayの名前を変更し、あなたがそれを参照してくださいよ)いますが、領域を置くしようとしていますその中に。

デザインの観点からは、それらがエリアの場合は、Shape[] areasである必要があります。エリアはShapeではないため、配列はタイプである必要があります。エリアはint[] areasです。

だから、これはあなたがオブジェクトタイプ(形状)の配列にプリミティブ型(int)を入れしようとしているList<T>

List<Integer> areas = new List<>() {{ 
    add(ract.area()); 
    add(sq.area()); 
    add(prlg.area()); 
}}; 
0

のような、より高度な種類を試してみてください、また

int[] areas = {rect.area(), sq.area(), prlg.area()}; 

する必要がありますこれは違法です。

「領域値を配列に入れる」ことを意図した場合は、int型の配列を作成する必要があります。以下を実行してください。

int[] areaArray = {ract.area(),sq.area(),prlg.area()}; 
関連する問題