"Room"类是抽象的,无法被实例化。

21

我有一个抽象类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 是抽象的, 无法实例化

我理解抽象类无法被实例化,但是怎么样才能最好地添加一个房间呢?


3
你说你“有一个抽象类Room”,并且你想知道为什么当你尝试实例化它时编译器会报错? - Oliver Charlesworth
1
我认为你应该快速浏览一下这个页面:http://docs.oracle.com/javase/tutorial/ :-) - Lukas Eder
你为什么将room抽象化?问问自己是否真正理解了“抽象”所做的事情,你应该能够自己回答这个问题。 - kapex
你把这个方法声明放在哪里? - alishaik786
1
你不能创建一个抽象类的实例,需要使用具体的类。例如:room.add( new BigRoom(roomNumber,ensuite) ); - Alex K
3个回答

15

你遇到这个错误是因为你试图创建一个抽象类的实例,这是不可能的。你需要:

room.add(new Family(roomNumber, ensuoute));
或者
room.add(new Standard(roomNumber, ensuoute));

2
谢谢,这正是我在寻找的,不知道为什么我没想到。 - Darren Burgess

7
错误已经说明了问题:Room 是一个抽象类,抽象类不能被实例化。
你在这里尝试实例化 Room
new Room(roomNumber,ensuite)

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

要解决这个问题,您需要找出给定房间号的正确房间类型,并实例化相应的类。


-1

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

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

这不是正确的。


1
这并没有为问题增加任何新内容,可以被删除。 - Ola Ström

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接