public interface Item

   {

   double purchasePrice();

   }

  

*********************************************************


public abstract class Taxable implements Item

   {

   private double taxRate;

   

   public abstract double getListPrice();

   

   public Taxable( double rate )

      {

      taxRate = rate;

      } // end constructor

      

   public double purchasePrice()

      {

      return getListPrice() * (1 + taxRate);

      } // end method purchasePrice   

      

      

   } // end class Taxable



*********************************************************


public class Vehicle extends Taxable

   {

   private double dealerCost;

   private double dealerMarkup;

   

   public Vehicle( double dealerCost, double dealerMarkup,

                   double taxRate)

      {

      super(taxRate);

      this.dealerCost = dealerCost;

      this.dealerMarkup = dealerMarkup;

      } // end constructor

    

   public void changeMarkup( double markup )

      {

      this.dealerMarkup = markup;

      }

         

   public double getListPrice()

      {

      return dealerCost + dealerMarkup;

      }                  

            

      

   } // end class Vehicle

   



*********************************************************


public class NonTaxable implements Item

   {

   public double purchasePrice()

      {

      return 0.0;

      }

   }



*********************************************************


public class ItemDriver

   {

   public static void main( String[] args )

      {

      Vehicle v1 = new Vehicle( 20000.00, 2500.00, 0.10);

      

      System.out.println( v1.purchasePrice() );

      

      v1.changeMarkup( 0 );

      System.out.println( v1.purchasePrice() );

      

      } // end method main

   

   } // end class ItemDriver



*********************************************************