2017-04-05 15 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이 확장하거나 객실 클래스에서 논리를 얻을 수 있다는 어떤 의미가 있는가, 다른 방법으로 주위 안? 그래서 정말 룸 자료 기본 클래스입니까? 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 
} 

참고 많은 자바 프로그래머 오늘날 사용 상속 - preferring composition.