2017-04-05 5 views
-1

Ich versuche, eine Klasse namens RoomBase zu machen, und es hat eine abstrakte Methode und zwei Attribute, ich muss mein Programm arbeiten, so dass die RoomBase Klasse erbt alles, was die getRoomDetailsFromUser() macht in die Room Klasse.Abstrakte Klasse erbt Methode und Attribute von einer anderen Klasse

RoomBase Klasse:

public abstract class RoomBase { 

    public abstract void getRoomDetailsFromUser(); 
    private int roomNumber; 
    private int NumberOfSeats; 
} 

Room Klasse:

public abstract class Room implements Bookable { 
    Scanner input = new Scanner(System.in); 
    private static int roomNumber; 
    private static int numberOfSeats; 
    private static String reservedBy = ""; 
    private static boolean reserved; 
    private static boolean hasSmartBoard; 

    /** 
    * Get the attribute values from the user. 
    */ 

    public Room(int roomNumber) { 
     this.roomNumber = roomNumber; 

    } 

    public void getRoomDetailsFromUser() { 

     System.out.print("Enter number of seats: "); 
     numberOfSeats = input.nextInt(); 
     input.nextLine(); 
     System.out.print("Does this classroom have a smart board? (Y/N)"); 
     hasSmartBoard = input.nextLine().equalsIgnoreCase("y"); 

    } 

    public boolean isHasSmartBoard() { 
     return hasSmartBoard; 
    } 

    public void setHasSmartBoard(boolean hasSmartBoard) { 
     this.hasSmartBoard = hasSmartBoard; 
    } 

    public static int getNumberOfSeats() { 
     return numberOfSeats; 
    } 

    public void setNumberOfSeats(int numberOfSeats) { 
     this.numberOfSeats = numberOfSeats; 
    } 

    public String getReservedBy() { 
     return reservedBy; 
    } 

    public void setReservedBy(String reservedBy) { 
     this.reservedBy = reservedBy; 
    } 

    public boolean isReserved() { 
     return reserved; 
    } 

    public void setReserved(boolean reserved) { 
     this.reserved = reserved; 
    } 


    public int getRoomNumber() { 
     return roomNumber; 
    } 

    /** 
    * Update the room to reserved and get the reserved by. 
    */ 

    public void reserveThisRoom(){ 
     this.reserved = true; 
     System.out.println("Enter the name of the person reserving this room: "); 
     reservedBy = input.nextLine(); 
    } 

    /** 
    * Update the room to not reserved and clear the reserved by. 
    */ 

    public void releaseThisRoom(){ 
     this.reserved = false; 
     reservedBy = ""; 
     System.out.println("Room has been released\n"); 
    } 

    public String toString() { 
     String output = "\n\n******************************" 
      + "\nRoom Number: " + roomNumber 
      + "\nNumber of Seats: " + numberOfSeats 
      + "\nReserved By: " + reservedBy 
      + "\nReserved: " + reserved 
      + "\nSmart Board: "+ hasSmartBoard; 
     return output; 
    } 
} 

Antwort

0

Ich glaube, Sie als die Implementierung ein wenig mehr auf das Design denken, wollen wir zum Beispiel sehen, was die Hierarchie Klasse sei, und am wichtigsten, warum.

Macht es Sinn, dass die RoomBase die Logik der Room-Klasse erweitert oder bekommt, sollte das nicht umgekehrt sein? so ist es wirklich Zimmer Basis eine Basisklasse? Wenn getRoomDetailsFromUser Methodenlogik sollte ein gemeinsamer oder Basiscode wäre es nicht stattdessen auf der Basisklasse, sondern in der bestimmten Klasse (Raum in diesem Fall), und zu Ende, brauchen Sie wirklich eine abstrakte Klasse hier überhaupt? oder erfüllt eine reguläre Basisklasse Ihre Bedürfnisse?

Überprüfen Sie das Design und lassen Sie mich wissen, wenn ich Ihnen weiterhelfen kann.

0

Die Frage ist ein wenig unklar, möchten Sie RoomBase instanziieren? Oder sollte es abstrakt bleiben. Soll Room von RoomBase erben? Scheint so, als die Namen dies andeuten und Roob nicht abstrakt ist.

Um Ihre Frage so gut wie möglich zu beantworten: Die einzige Möglichkeit, die ich sehe, ist RoomBase extendieren Raum. Damit würdest du alles in Room erben, nicht nur die Methode. Aber nur das Erben der Methode wird nicht funktionieren, da diese getRoomDetailsFromUser() -Variable nur in Room, aber nicht in RoomBase definierte Variable verwendet.

0

Wenn ich die Namen ignorieren Sie Ihre Klassen gegeben haben, dann ist die Antwort einfach:

Ich brauche mein Programm Arbeit zu machen, damit die Klasse alles erbt Roombase, die die getRoomDetailsFromUser() Zimmer Klasse tut in.

public abstract class RoomBase extends Room { 
} 

Natürlich können Sie eine abstrakte Klasse nicht instanziiert, so zu Verwendung dieser Klasse machen würden Sie brauchen eine konkrete Unterklasse von RoomBase zu erstellen:

public class BathRoom extends RoomBase { 
} 

RoomBase someBathRoom = new BathRoom(); 

Obwohl diese beantwortet Ihre Frage genau, es ist eine ungewöhnliche Klassenhierarchie angesichts der Namen. Eine mögliche häufiger Muster, wäre:

public interface Room extends Bookable { 
     method signatures that Rooms have 
} 

public abstract class RoomBase implements Room { 
     methods common to all rooms go here 
} 

public class BathRoom extends RoomBase { 
     methods implementing abstract methods from RoomBase 
     methods unique to BathRoom 
} 

Beachten Sie auch, dass viele Java-Programmierer verwenden heute Vererbung in Maßen - preferring composition.

Verwandte Themen