Problem 1:Implement a class Address. An address has a house number, a street, an optional apartment number, a city, a state, and a postal code. Supply two constructors: one with an apartment number and one without. Supply a print method that prints the address with the street on one line and the city, state, and postal code on the next line. Supply a method public boolean comesBefore (Address other) that tests whether this address comes before another when the addresses are compared by postal code.Problem 2:Implement a class with methods getSurfaceArea() and getVolume(). In the constructor supply the height and radius of the can.Problem 3:Month Class Write a class named Month. The class should have an int field named monthNumber that holds the number of the month. For example, January would be 1, February would be 2, and so forth. In addition, provide the following methods:A no-arg constructor that sets the monthNumber field to 1.A constructor that accepts the number of the month as an argument. It should set the monthNumber field to the value passed as the argument. If a value less than 1 or greater than 12 is passed, the constructor should set monthNumber to 1.A constructor that accepts the name of the month, such as “January” or “February” as an argument. It should set the monthNumber field to the correct corresponding value.A setMonthNumber method that accepts an int argument, which is assigned to the monthNumber field. If a value less than 1 or greater than 12 is passed, the method should set monthNumber to 1.A getMonthNumber method that returns the value in the monthNumber field.A getMonthName method that returns the name of the month. For example, if the monthNumber field contains 1, then this method should return “January”.A toString method that returns the same value as the getMonthName method.An equals method that accepts a Month object as an argument. If the argument object holds the same data as the calling object, this method should return true. Otherwise, it should return false.A greaterThan method that accepts a Month object as an argument. If the calling object’s monthNumber field is greater than the argument’s monthNumber field, this method should return true. Otherwise, it should return false.A lessThan method that accepts a Month object as an argument. If the calling object’s monthNumber field is less than the argument’s monthNumber field, this method should return true. Otherwise, it should return false.Problem 4:Implement a class Car with the following properties. A car has a certain fuel efficiency (measured in miles/gallon) and a certain amount of fuel in the gas tank. The efficiency is specified in the constructor, and the initial fuel level is 0. Supply a method drive that simulates driving the car for a cartain distance, reducing the fuel level in the gas tank, and methods getGasLevel, to return the current fuel level and addGas, to tank up. Sample usage:Car myHybrid = new Car(50); //50 miles per gallonmyHybrid.addGas(20); // Tank 20 gallonsmyHybrid.drive(100); // Drive 100 milesSystem.out.println(myHybrid>.getGasLevel()); // Print fuel remaining.Problem 5:RetailItem Class Write a class named RetailItem that holds data about an item in a retail store. The class should have the following fields:description. The description field references a String object that holds a brief description of the item.units OnHand. The unitsOnHand field is an int variable that holds the number of units currently in inventory.price. The price field is a double that holds the item’s retail price.Write a constructor that accepts arguments for each field, appropriate mutator methods that store values in these fields, and accessor methods that return the values in these fields. Once you have written the class, write a separate program that creates three RetailItem objects and stores the following data in them:Description Units on Hand PriceItem #1 Jacket 12 59.95$Item #2 Designer Jeans 40 34.95$Item #3 Shirt 20 24.95$SubmissionYou are required to submit the following files for this assignment by clicking the Submit Assignment button above.You should create one Java file and one driver file (aka test program) for each problem and save them all in one folder. Compress the folder as a .zip file and submit it here. Please name your .zip file as P7-Last Name-First Nam.zip. For example, P7-Smith-John.zip.A Word document containing the algorithms and the screenshots of the running programs for all of the five problems. Please name your Word document as P7-Last Name-First Name.docx or .doc. For example, P7-Smith-John.docx.