【问题标题】:Class 'Room' is abstract; cannot be instantiated“房间”类是抽象的;无法实例化
【发布时间】:2011-12-15 12:11:55
【问题描述】:

我有一个抽象类Room,它有子类FamilyStandard,我在Hostel 类中创建了room = new ArrayList<Room>();。我有一个向 ArrayList 添加房间的方法;

public String addRoom(String roomNumber, boolean ensuite)
{
    if  (roomNumber.equals("")) 
        return "Error - Empty name field\n";
    else

    room.add( new Room(roomNumber,ensuite) );
    return  "RoomNumber: " + roomNumber + " Ensuite: " + ensuite 
     + "  Has been added to Hostel " + hostelName;
}

但是我得到了编译时错误;

房间是抽象的;无法实例化

我知道抽象类无法实例化,但是添加房间的最佳方法是什么?

【问题讨论】:

  • 你说你“有一个抽象类Room”,你问为什么编译器在你尝试实例化它时会报错?
  • 我想你应该快速浏览一下这个页面:docs.oracle.com/javase/tutorial :-)
  • 你为什么要把房间抽象化?问问自己你是否真的了解abstract 的作用,你应该能够自己回答这个问题。
  • 你在哪里给出这个方法声明?
  • 你不能创建abstract类的实例,需要具体的类。例如:room.add( new BigRoom(roomNumber,ensuite) );

标签: java abstract-class instantiation


【解决方案1】:

你有这个错误是因为你试图创建一个抽象类的实例,这是不可能的。你必须

room.add(new Family(roomNumber, ensuoute));

room.add(new Standard(roomNumber, ensuoute));

【讨论】:

  • 谢谢,这正是我要找的,不知道我怎么没想到
【解决方案2】:

错误说明了一切:Room 是抽象类,无法实例化抽象类。

您正在尝试在此处实例化 Room

new Room(roomNumber,ensuite)

您只能创建具体(即非抽象)类的实例。 FamilyStandard 很可能是具体的类,因此可以实例化。

要解决此问题,您需要根据房间号确定正确的房间类型,并实例化相应的类。

【讨论】:

    【解决方案3】:

    你正在创建一个抽象类的实例;

    room.add(new Room(roomNumber,ensuite));
    

    这是不正确的。

    【讨论】:

      猜你喜欢
      • 2013-03-07
      • 2015-08-04
      • 1970-01-01
      • 2017-02-05
      • 2015-10-06
      • 2012-09-08
      • 1970-01-01
      相关资源
      最近更新 更多