2011-12-15 35 views
8

Tôi có một lớp trừu tượng Room có lớp con FamilyStandard, tôi đã tạo room = new ArrayList<Room>(); trong một lớp học Hostel. Tôi có một phương pháp để thêm một phòng vào ArrayList;Lớp 'Phòng' là trừu tượng; không thể được khởi tạo

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

Tuy nhiên tôi nhận được lỗi thời gian biên dịch;

Phòng là trừu tượng; không thể được khởi tạo

Tôi hiểu rằng các lớp trừu tượng không thể được khởi tạo, nhưng cách tốt nhất để thêm phòng là gì?

+2

Bạn nói rằng bạn "có một lớp trừu tượng' Room' "và bạn đang hỏi tại sao trình biên dịch lại phàn nàn khi bạn cố gắng khởi tạo nó? –

+1

Tôi nghĩ bạn nên xem lướt qua trang này: http://docs.oracle.com/javase/tutorial/ :-) –

+0

Tại sao bạn lại làm cho phòng trừu tượng? Hãy tự hỏi nếu bạn thực sự hiểu những gì 'abstract' hiện và bạn sẽ có thể trả lời câu hỏi cho mình. – Kapep

Trả lời

8

Bạn có lỗi này vì bạn đang cố gắng tạo một thể hiện của lớp trừu tượng, điều này là không thể. Bạn phải

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

hoặc

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

cảm ơn, đây chính xác là những gì tôi đang tìm kiếm, duno làm thế nào tôi không nghĩ về nó –

+1

:) Đừng lo lắng điều đó xảy ra với tất cả mọi người .. .. – AValchev

6

Lỗi nói lên tất cả: Room là một lớp trừu tượng, và lớp trừu tượng không thể được khởi tạo.

Bạn đang cố gắng để nhanh chóng Room đây:

new Room(roomNumber,ensuite) 

Bạn chỉ có thể tạo ra các trường hợp cụ thể lớp học (ví dụ: không trừu tượng). Có thể là trường hợp FamilyStandard là các lớp cụ thể và do đó có thể được khởi tạo.

Để khắc phục điều này, bạn sẽ cần phải tìm ra loại phòng chính xác cho số phòng và khởi tạo lớp thích hợp.

0

Bạn đang tạo một thể hiện của một lớp trừu tượng;

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

Điều này không đúng.

Các vấn đề liên quan