Сделаем это, проходя по каждому из case и создавая соответствующий перегружающий метод. Начнем с класса RegularPrice:
  class RegularPrice...
    double getCharge( int daysRented) {
      double result = 2;
      if( daysRented>2) result += ( daysRented-2)*1.5;
      return result;
    }
Здесь мы заменили родительский case, просто оставив его как есть. Компилируем и запускаем тесты для этого случая, после чего делаем то же самое со следующим case, снова компилируем и запускаем тесты. Чтобы убедиться, что выполняется именно код дочернего класса, стоит внести преднамеренную ошибку и увидеть отчет о сбое при запуске тестов. Только не подумайте, что я параноик или что-то в этом духе.
  class ChildrensPrice...
    double getCharge( int daysRented) {
      double result = 1.5;
      if( daysRented>3) result += ( daysRented-3)*1.5;
      return result;
    }
  class NewReleasePrice...
    double getCharge( int daysRented) {
      return daysRented*3;
    }
После того, как мы закончили со всеми case, можно сделать метод Price.getCharge абстрактным:
  class Price...
    abstract double getCharge( int daysRented);

В начало | предыдущая | следующая