2017-04-05 143 views
-1

我想要创建一个名为RoomBase的类,它有一个抽象方法和两个属性,我需要让我的程序工作,因此RoomBase类继承getRoomDetailsFromUser()所做的所有事情类Room抽象类继承另一个类的方法和属性

RoomBase类:

public abstract class RoomBase { 

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

Room类:

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

回答

0

我认为你必须考虑多一点的设计比实现,让我们来看看,例如什么类层次结构将是,而且最重要的是,为什么。

这是否有任何意义,RoomBase扩展或从Room类获取逻辑,不应该以其他方式?所以它真的是基地一个基类?现在如果getRoomDetailsFromUser方法的逻辑应该是一个普通的或基本的代码,它不会在基类中,而是在特定的类中(在这种情况下是空间),并且完成后,你真的需要一个抽象类吗?或者一个普通的基类能满足你的需求?

检查设计,让我知道如果我可以帮助你更进一步。

0

这个问题有点不清楚,你想实例化RoomBase吗?或者它应该保持抽象。 Room应该从RoomBase继承吗?似乎如此的名字暗示了这一点,Roob并不抽象。

要回答你的问题,我猜可能是最好的: 我看到的唯一方法是让RoomBase扩展房间。有了这个,你将继承房间中的所有内容,而不仅仅是方法。但只继承该方法将不起作用,因为此getRoomDetailsFromUser()使用仅在Room中定义的变量,但不在RoomBase中定义。

0

如果我不理你给你的类的名称,那么答案很简单:

我需要让我的工作方案,因此RoomBase类继承一切的getRoomDetailsFromUser()确实在客房类。

public abstract class RoomBase extends Room { 
} 

当然你不能实例化一个抽象类,所以利用这一类的你需要创建的RoomBase具体子类:

public class BathRoom extends RoomBase { 
} 

RoomBase someBathRoom = new BathRoom(); 

虽然这回答您的问题确切地说,这是一个不寻常的类层次给定的名称。一种可能更常见的模式,将是:

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 
} 

还要注意,许多Java程序员今天使用继承适度 - preferring composition