web-dev-qa-db-ja.com

クラス 'Room'は抽象です。インスタンス化できません

サブクラスRoomFamilyを持つ抽象クラスStandardのクラスがあります。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;
}

ただし、コンパイル時エラーが発生します。

部屋は抽象的です。インスタンス化できません

抽象クラスはインスタンス化できないことを理解していますが、部屋を追加する最良の方法は何ですか?

12
Darren Burgess

抽象クラスのインスタンスを作成しようとしているため、このエラーが発生しますが、これは不可能です。必ず

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

または

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

エラーはそれをすべて言います:Roomは抽象クラスであり、抽象クラスはインスタンス化できません。

ここでRoomをインスタンス化しようとしています:

new Room(roomNumber,ensuite)

具象(つまり、非抽象)クラスのインスタンスのみを作成できます。 FamilyStandardは具象クラスであり、インスタンス化できる場合がほとんどです。

これを修正するには、部屋番号を指定して正しい部屋タイプを把握し、適切なクラスをインスタンス化する必要があります。

6
NPE