2017-04-05 5 views
-1

J'essaye de faire une classe appelée RoomBase et il a une méthode abstraite et deux attributs, je dois faire fonctionner mon programme de sorte que la classe RoomBase hérite de tout ce que le getRoomDetailsFromUser() fait dans la classe Room.Résumé classe hérite de la méthode et les attributs d'une autre classe

RoomBase Classe:

public abstract class RoomBase { 

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

Room Classe:

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

Répondre

0

Je pense que vous devez penser un peu plus sur la conception que la mise en œuvre, nous allons voir par exemple ce que la hiérarchie des classes sera être, et le plus important, pourquoi. Est-ce que cela a un sens que RoomBase étend ou obtient la logique de la classe Room, ne devrait pas être l'inverse? donc est-ce vraiment Chambre Base une classe de base? Maintenant, si la logique de la méthode getRoomDetailsFromUser doit être un code commun ou de base, elle ne sera pas sur la classe de base mais dans la classe spécifique (Room dans ce cas), et pour finir, avez-vous vraiment besoin d'une classe abstraite? ou est-ce qu'une classe de base régulière répond à vos besoins?

Vérifiez la conception et faites-moi savoir si je peux vous aider davantage.

0

La question est un peu floue, voulez-vous instancier RoomBase? Ou devrait-il rester abstrait. Est-ce que Room doit hériter de RoomBase? Il semble que les noms le suggèrent et Roob n'est pas abstrait.

Pour répondre à votre question du mieux que je peux deviner: La seule façon que je vois est de faire de RoomBase prolonger la pièce. Avec cela, vous héritiez de tout dans Room, pas seulement la méthode. Mais seul l'héritage de la méthode ne fonctionnera pas, car getRoomDetailsFromUser() utilise une variable uniquement définie dans Room, mais pas dans RoomBase.

0

Si j'ignore les noms que vous avez donné vos classes, alors la réponse est simple:

que je dois faire mon travail de programme pour la classe RoomBase hérite de tout ce que le getRoomDetailsFromUser() fait dans la classe de chambre.

public abstract class RoomBase extends Room { 
} 

Bien sûr, vous ne pouvez pas instancier une classe abstraite, donc d'utiliser cette classe, vous aurez besoin de créer une sous-classe concrète de RoomBase:

public class BathRoom extends RoomBase { 
} 

RoomBase someBathRoom = new BathRoom(); 

Bien que cela répond à votre question exactement, c'est une hiérarchie de classe inhabituelle étant donné les noms. Un possible modèle plus commun, serait:

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 
} 

Notez aussi que beaucoup d'héritage utilisent Java programmeurs aujourd'hui avec modération - preferring composition.