【问题标题】:is it possible to cast int into custom class type(in java)? if yes then how?是否可以将 int 转换为自定义类类型(在 java 中)?如果是,那怎么办?
【发布时间】:2017-07-21 14:25:59
【问题描述】:

我是java初学者,试图创建一个抽象类Shape的抽象方法abstract int area()Shape类扩展了其他三个类这些类的覆盖面积方法正在计算面积并返回int值,我想存储在Shape类数组中。

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();
    }
}

错误:不兼容的类型:int 无法转换为 Shape

【问题讨论】:

    标签: java


    【解决方案1】:

    也许是故意写这个?

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

    还是这样?

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

    如果你计算一个形状的面积,你就不再有Shape,而是int

    【讨论】:

      【解决方案2】:

      Java - 是一种静态类型语言。这意味着您不能将int 值存储在Shape 的数组中。 为了解决这个问题,你应该创建一个整数数组:

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

      【讨论】:

        【解决方案3】:

        异常本身说明问题int cannot be converted to Shape,更改数组数据类型

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

        原因是area() 方法返回类型为int 的值不是形状。

        【讨论】:

          【解决方案4】:

          您的Shape[] 是一个形状数组(只需将shapeArray 重命名为shapes,您就会看到它)但您正试图在其中放置区域。

          所以从设计的角度来看,如果这些是区域,它应该是Shape[] areas。因为区域不是Shape,所以您的数组需要是类型,区域是int[] areas

          应该是这样的

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

          另外,尝试更复杂的类型,例如 List<T>

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

          【讨论】:

            【解决方案5】:

            您试图将原始类型(int)放入对象类型(Shape)的数组中,这是非法的。

            如果您打算“将面积值放入数组中”,则必须创建一个 int 类型的数组。请执行以下操作;

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-11-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-01-13
              相关资源
              最近更新 更多