建模继承层次结构... java

时间:2018-02-21 07:33:33

标签: java inheritance

  

奥什科什的住宿可分为三种类型 - 酒店(以房间数量和星级评定为主),旅馆(以房间数量为模型以及是否提供自行车租赁服务)和住宿加早餐(模仿)根据房间数量以及是否允许延迟抵达)。每间客房每晚的价格总是固定的,酒店,旅馆和住宿加早餐的价格分别为40美元,20美元和55美元。模拟这种情况的继承层次结构的骨架代码如下所示。完成所有缺失的部分,以便代码编译,模拟继承层次结构,并具有上述所有功能。您应该确定存储适当数据成员的类以及这些数据成员的类型。在每个班级中,完成构造函数并提供一个方法computeRate,该方法将所花费的夜数作为参数,并返回该住宿的总房价。不应提供其他方法。

有人可以给我一些天气提示,你认为我会以正确的方式解决这个问题。我遇到的主要问题是computeRate方法。我不知道如何设置酒店,住宿加早餐和旅馆的住宿价格。我尝试使用超级,但我不完全确定这是不是我应该做的。

//父类

public class Lodging
{
    int sum;
    int price;
    public Lodging( int price ) {
        this.price = price;
    }
}

public double computeRate(int numberOfNights){

    price *= numberOfNights;
    return sum;
}

// child class

public class Hostel extends Lodging
{
    private int numberOfRooms;
    private boolean bikeRentals;

    public Hostel( int rooms, boolean rentals) { 
        super(20);
        this.numberOfRooms = rooms;
        this.bikeRentals = rentals;   
    }  
}  

// child class

public class Hotel extends Lodging
{
    private int rooms;
    private int starRating;

    public Hotel( int rooms, int starRating ) {
        super(40);
        this.rooms = rooms;
        this.starRating = starRating;
    } 
}

// child class

public class BednBreakfast extends Lodging
{
    private int numberOfRooms;
    private boolean lateArrivals;

    public BednBreakfast( int rooms, boolean late ){
        super(55);
        this.numberOfRooms = rooms;
        this.late = late;

这是给定的骨架代码

  class Lodging
  { 
         public Lodging(                   ) 
         { 

         } 
  }//End class Lodging 

  class Hotel 
  { 
         public Hotel(                    ) 
         {

         } 
  }//End class Hotel 

  class Hostel 
  {
         public Hostel(         ) 
         { 

         } 
  }//End class Hostel 

  class BednBreakfast 
  { 
         public BednBreakfast (       ) 
         { 

         } 
  }//End class BednBreakfast

1 个答案:

答案 0 :(得分:1)

您的每个类都有空间,因此我将其移至父类,并将其添加到构造函数中。

此外,Lodging是一个抽象概念,因此您无法创建new Lodging(),您需要一个特定的实例。

public abstract class Lodging {
    private double nightlyRate;
    private int capacity;

    public Lodging( int capacity, double rate ) {
        nightlyRate = rate;
        this.capacity = capacity;
    }

    public double computeRate(int numberOfNights){
        return this.nightlyRate * numberOfNights;
    }
}

然后,对于super(rooms, 20)示例,Hostel没有任何问题。它正确设置了父类的字段,每个子类都将继承超类的computeRate()方法。问题描述并不表示需要覆盖它。