1
public class TestingClass {


    public static void main(String[] args) {

        int numberRooms = 6;
        double totalSpace;
        Room[] rooms = new Room[numberRooms];
        rooms[0] = new Room(20, 20);
        rooms[1] = new Room(20, 20);
        rooms[2] = new Room(22, 20);
        rooms[3] = new Room(20, 20);
        rooms[4] = new Room(25, 20);
        rooms[5] = new Room(15, 13);

         Garage garage = new Garage(20, "Cement", 1, 20, 1, 4);

        for (int i = 0; i < numberRooms; i++) {
            totalSpace = totalSpace + calculateRoomSpace(rooms[i]);
        }

        System.out.println("Total room space is " + totalSpace);

        foo(garage);

    }

    public static double calculateRoomSpace(Room roomSpace) {
        double newRoomSpace = roomSpace.calcFloorSpace();
        return newRoomSpace;
    }

    public static void foo(Building myBuilding) {
        System.out.println("Total floor space is " + myBuilding.calcFloorSpace());
    }
}

我输入这段代码并得到错误

"Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    Cannot instantiate the type Garage

    at TestingClass.main(TestingClass.java:17)"

这里到底有什么问题?

编辑 **这里是车库类**

abstract public class Garage extends Building {


    private int cars;
    private String floorType;
    private int garageLength;
    private int garageWidth;

    public Garage(int floors, int windows, int cars, String floorType,
            int garageLength, int garageWidth) {
        super(floors, windows);
        this.cars = cars;
        this.floorType = floorType;
        this.garageLength = garageLength;
        this.garageWidth = garageWidth;
    }

    @Override
public double calcFloorSpace() {
    int floorSize;
    floorSize = garageLength * garageWidth;
    return floorSize;
}

    public int getCars() {
        return cars;
    }

    public void setCars(int cars) {
        this.cars = cars;
    }

    public String getFloorType() {
        return floorType;
    }

    public void setFloorType(String floorType) {
        this.floorType = floorType;
    }

    public int getGarageLength() {
        return garageLength;
    }

    public void setGarageLength(int garageLength) {
        this.garageLength = garageLength;
    }

    public int getGarageWidth() {
        return garageWidth;
    }

    public void setGarageWidth(int garageWidth) {
        this.garageWidth = garageWidth;
    }

    @Override
    public String toString() {
        return "Garage [cars=" + cars + ", floorType=" + floorType
                + ", garageLength=" + garageLength + ", garageWidth="
                + garageWidth + "]";
    }

}

希望这可以帮助。不是这方面的专家,并且花了很长时间才弄清楚这一点。谢谢

4

4 回答 4

3

您不能实例化抽象类。

你有两个选择:

  • abstract从类声明中删除,或
  • 创建另一个类来扩展Garage,可以实例化。
于 2013-07-23T04:52:47.503 回答
2

您不能实例化一个abstract类的实例。您要么需要使您的类具体化(删除abstract类上的修饰符并为所有方法提供实现),要么扩展抽象类以创建非抽象类。

当您删除abstract修饰符时,编译器会告诉您缺少哪些抽象方法(如果有)。

于 2013-07-23T04:52:28.630 回答
2

你的车库类被声明为抽象类不能被实例化。检查这个以获取更多细节抽象类可以有一个构造函数吗?

于 2013-07-23T04:54:23.047 回答
0

Garage 是一个抽象类,因此无法实例化。只有它的子类可以被实例化。

于 2013-07-23T04:51:25.880 回答