title: Class and interface design. Method not determined
body: <p>I've created a super class (abstract) as it and its child classes inherit data from an interface (named Profitable). During compilation, an error is returned where it does not recognize method calcuateRevenue(). The method is declared in the interface, and then it is defined in the child classes (each class uses different means to calculate revenue). Since there are several classes, I will include the super class, one example of the child class, interface, and of course the main method (BradleyLangrehrP5). Am I missing something elementary, or is something designed terribly poorly?</p>
  
  <pre><code>public class BradleyLangrehrP5
  {
      public static void main(String[] args)
      {
          //Create movieArray list
          Movie[] movieArrayList = new Movie[6];
  
          //Instantiate movies from each subclass
          movieArrayList[0] = new Animated(.1, 5.0 , "Finding Nemo", 
                  "Andrew Stanton", 2003, 90.0);
          movieArrayList[1] = new Animated(.08, 3.0, "Shrek", 
                  "Andrew Adamson", 2001, 60.0);
          movieArrayList[2] = new Documentary(4.0, 2.5, 
                  "Fidel: The Untold Story", "Estela Bravo", 2001, 72.0);
          movieArrayList[3] = new Documentary(6.0, 3.25, 
                  "An Inconvenient Truth", "David Guggenheim", 2006, 1.0);
          movieArrayList[4] = new Drama(25, 4.5, "Red Lights", 
                  "Rodrigo Cortes", 2012, 17.0);
          movieArrayList[5] = new Drama(15, 3.75, "The Godfather", 
                  "Francis Ford Coppola", 1972, 6.5);
          displayNumberOfMoviesAndRevenue(movieArrayList);
      }
  
      public static void displayMovieArrayList(Movie[] movieArrayList)
  
      {
  
          for(int i = 0; i &lt; movieArrayList.length; i++)
  
          {
  
              System.out.println(movieArrayList[i].toString());
  
          }
  
      }
  
  
      public static void displayNumberOfMoviesAndRevenue(Movie[] movieArrayList)
      {
          for (int i = 0;i &lt; movieArrayList.length; i++)
          {
              System.out.println(movieArrayList[i].totalMovies());
              System.out.println(movieArrayList[i].calculateRevenue());
          }
      }
  }
  
  public class Movie
  {
      private String title;
      private String director;
      private int year;
      private double productionCost;
      private static int totalMovies = 0;
  
      //Construct a default movie
      public Movie()
      {
          totalMovies++;
      }
  
      //Cosntruct movie with specific information
      public Movie(String title, String director, int year, double productionCost)
      {
          this.title = title;
          this.director = director;
          this.year = year;
          this.productionCost = productionCost;
          totalMovies++;
      }
  
      //Accessors
      public String getTitle()
      {
          return title;
      }
  
      public String getDirector()
      {
          return director;
      }
  
      public int getYear()
      {
          return year;
      }
  
      public double getProductionCost()
      {
          return productionCost;
      }
  
      public int totalMovies()
      {
          return totalMovies;
      }
  
      //Mutators
      public void setTitle(String title)
      {
          this.title = title;
      }
  
      public void setDirector(String director)
      {
          this.director = director;
      }
  
      public void setYear(int year)
      {
          this.year = year;
      }
  
      public void setProductionCost(double productionCost)
      {
          this.productionCost = productionCost;
      }
  
      //Effectors
      public String toString()
      {
          return "Movie: " + getTitle() + "was directed by " + getDirector() + 
                  "with a production cost of " + getProductionCost();
      }
  }
  
  public final class Animated extends Movie implements Profitable
  {
      private double royaltyRate;
      private double incomeRelatedProducts;
  
      //No arg constructor
      public Animated()
      {
          super();
      }
  
      //Constructor with arguments
      public Animated(double royaltyRate, double incomeRelatedProducts, String title,
              String director, int year, double productionCost)
      {
          super(title, director, year, productionCost);
          this.royaltyRate = royaltyRate;
          this.incomeRelatedProducts = incomeRelatedProducts;
      }
  
      //Accessors
      public double getRoyaltyRate()
      {
          return royaltyRate;
      }
  
      public double getIncomeRelatedProducts()
      {
          return incomeRelatedProducts;
      }
  
      //Mutators
      public void setRoyaltyRate(double royaltyRate)
      {
          this.royaltyRate = royaltyRate;
      }
  
      public void setIncomeRelatedProducts(double incomeRelatedProducts)
      {
          this.incomeRelatedProducts = incomeRelatedProducts;
      }
  
      //Effectors
      public double calculateRevenue()
      {
          return incomeRelatedProducts * royaltyRate;
      }
  
      public double calculateProfit()
      {
          double profit = calculateRevenue() - getProductionCost();
          return profit;
      }
  
      public String getCategory()
      {
          return "Animated";
      }
  
      public String toString()
      {
          return "This is an animated movie, and it is";
      }
  }
  
  public interface Profitable
  {
      double calculateRevenue();
      double calculateProfit();
      String getCategory();
  }//end of Profitable interface
  </code></pre>