2011-12-15 16 views
8

Mam klasę klasy abstrakcyjnej Room, która ma podklasy Family i Standard, utworzono room = new ArrayList<Room>(); w klasie Hostel. Mam metodę dodawania pokoju do ArrayList;Klasa "Pokój" jest abstrakcyjna; nie można utworzyć instancji

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

Jednak pojawia się błąd czasu kompilacji;

Pokój jest abstrakcyjny; nie można utworzyć instancji

Rozumiem, że nie można utworzyć instancji klas abstrakcyjnych, ale jaki jest najlepszy sposób na dodanie pokoi?

+2

Mówisz, że masz "abstrakcyjną klasę" Pokój "i pytasz, dlaczego kompilator narzeka, gdy próbujesz ją utworzyć? –

+1

Myślę, że powinieneś rzucić okiem na tę stronę: http://docs.oracle.com/javase/tutorial/ :-) –

+0

Dlaczego zrobiłeś pokój abstrakcyjny? Zadaj sobie pytanie, czy naprawdę rozumiesz, co "abstrakcyjne" ma i powinieneś być w stanie odpowiedzieć na to pytanie samodzielnie. – Kapep

Odpowiedz

8

Masz ten błąd, ponieważ próbujesz utworzyć wystąpienie klasy abstrakcyjnej, co jest niemożliwe. Trzeba

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

lub

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

dziękuję, właśnie tego szukałem, duno, jak ja o tym nie myślałem –

+1

:) Nie martw się, to zdarza się każdemu .. .. – AValchev

6

błędzie mówi wszystko: Room jest klasą abstrakcyjną i klasy abstrakcyjne nie może być instancja.

Próbujesz instancję Room tutaj:

new Room(roomNumber,ensuite) 

Można jedynie tworzyć instancje betonu (czyli non-streszczenie) klas. Prawdopodobnie jest tak, że Family i Standard są klasami konkretnymi i dlatego mogą być tworzone.

Aby to naprawić, musisz znaleźć właściwy typ pokoju, podając numer pokoju i utworzyć odpowiednią klasę.

0

Tworzysz instancję klasy abstrakcyjnej;

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

To nie jest poprawne.

Powiązane problemy