diff --git a/pom.xml b/pom.xml
index 93036ba..4d75a58 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,6 +7,26 @@
io.zipcoder
polymorphism
1.0-SNAPSHOT
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 7
+ 7
+
+
+
+
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
\ No newline at end of file
diff --git a/src/main/java/io/zipcoder/polymorphism/Console.java b/src/main/java/io/zipcoder/polymorphism/Console.java
new file mode 100644
index 0000000..978a731
--- /dev/null
+++ b/src/main/java/io/zipcoder/polymorphism/Console.java
@@ -0,0 +1,45 @@
+package io.zipcoder.polymorphism;
+
+import java.io.InputStream;
+import java.io.PrintStream;
+import java.util.Scanner;
+
+public class Console {
+
+ private final Scanner input;
+ private final PrintStream output;
+
+ public Console(InputStream in, PrintStream out){
+
+ this.input = new Scanner(in);
+ this.output = out;
+ }
+
+ public void print(String val, Object... args) {
+ output.format(val, args);
+ }
+
+ public void println(String val, Object... vals) {
+ print(val + "\n", vals);
+ }
+
+ public String getStringInput(String prompt, Object... args) {
+ println(prompt, args);
+ return input.nextLine();
+ }
+
+ public Integer getIntegerInput(String prompt, Object... args) {
+
+ String stringInput = getStringInput(prompt, args);
+ try {
+ Integer intInput = Integer.valueOf(stringInput);
+ return intInput;
+
+ } catch (NumberFormatException nfe) { // TODO - Eliminate recursive nature
+ println("[ %s ] is an invalid user input!", stringInput);
+ println("Try inputting an integer value!");
+ }
+
+ return getIntegerInput(prompt, args);
+ }
+}
diff --git a/src/main/java/io/zipcoder/polymorphism/MainApplication.java b/src/main/java/io/zipcoder/polymorphism/MainApplication.java
index ea9281e..f246851 100644
--- a/src/main/java/io/zipcoder/polymorphism/MainApplication.java
+++ b/src/main/java/io/zipcoder/polymorphism/MainApplication.java
@@ -1,7 +1,61 @@
package io.zipcoder.polymorphism;
+import io.zipcoder.polymorphism.Pets.*;
+
/**
* Created by leon on 11/6/17.
*/
public class MainApplication {
+
+ Console console = new Console(System.in, System.out);
+ Pets[] setOfPets;
+
+ public void run() {
+
+ printInfo(getTypes(getNumberOfPets()));
+
+ }
+
+ public Integer getNumberOfPets(){
+
+ int numberOfPets = console.getIntegerInput("How many pets do you have?");
+
+ return numberOfPets;
+ }
+
+
+ public Pets[] getTypes(int numberOfPets){
+
+ setOfPets = new Pets[numberOfPets];
+
+ for (int index = 0; index < numberOfPets; index++) {
+ String type = console.getStringInput("\nWhat type of pet is it?\n" +
+ " Options: Dog, Cat, Cow");
+ switch(type.toLowerCase()){
+
+ case "dog": setOfPets[index] = new Dog(getName()); break;
+ case "cat": setOfPets[index] = new Cat(getName()); break;
+ case "cow": setOfPets[index] = new Cow(getName()); break;
+ default: console.println("\nNot a valid animal."); index -= 1; break;
+ }
+ }
+
+ return setOfPets;
+ }
+
+
+ public String getName() {
+
+ return console.getStringInput("\nWhat is the pet's name?");
+ }
+
+
+ public void printInfo(Pets[] pets){
+
+ for (Pets pet: pets) {
+ console.println(pet.toString());
+ }
+ }
+
+
}
diff --git a/src/main/java/io/zipcoder/polymorphism/Pets/Cat.java b/src/main/java/io/zipcoder/polymorphism/Pets/Cat.java
new file mode 100644
index 0000000..ebfa631
--- /dev/null
+++ b/src/main/java/io/zipcoder/polymorphism/Pets/Cat.java
@@ -0,0 +1,23 @@
+package io.zipcoder.polymorphism.Pets;
+
+public class Cat extends Pets {
+
+ public Cat(String name) {
+
+ super(name);
+ }
+
+ public Cat(){
+ super("Fluffy");
+ }
+
+ @Override
+ public String type() {
+ return "Cat";
+ }
+
+ @Override
+ public String speak() {
+ return "meow!";
+ }
+}
diff --git a/src/main/java/io/zipcoder/polymorphism/Pets/Cow.java b/src/main/java/io/zipcoder/polymorphism/Pets/Cow.java
new file mode 100644
index 0000000..276b6c8
--- /dev/null
+++ b/src/main/java/io/zipcoder/polymorphism/Pets/Cow.java
@@ -0,0 +1,22 @@
+package io.zipcoder.polymorphism.Pets;
+
+public class Cow extends Pets {
+
+ public Cow(String name) {
+ super(name);
+ }
+
+ public Cow(){
+ super("Mimi");
+ }
+
+ @Override
+ public String type() {
+ return "Cow";
+ }
+
+ @Override
+ public String speak() {
+ return "moo!";
+ }
+}
diff --git a/src/main/java/io/zipcoder/polymorphism/Pets/Dog.java b/src/main/java/io/zipcoder/polymorphism/Pets/Dog.java
new file mode 100644
index 0000000..a91e77a
--- /dev/null
+++ b/src/main/java/io/zipcoder/polymorphism/Pets/Dog.java
@@ -0,0 +1,21 @@
+package io.zipcoder.polymorphism.Pets;
+
+public class Dog extends Pets {
+
+ public Dog(String name) {
+ super(name);
+ }
+
+ public Dog(){
+ super("Dingo");
+ }
+
+ public String type(){
+ return "Dog";
+ }
+
+ @Override
+ public String speak() {
+ return "woof!";
+ }
+}
diff --git a/src/main/java/io/zipcoder/polymorphism/Pets/Pets.java b/src/main/java/io/zipcoder/polymorphism/Pets/Pets.java
new file mode 100644
index 0000000..21be388
--- /dev/null
+++ b/src/main/java/io/zipcoder/polymorphism/Pets/Pets.java
@@ -0,0 +1,29 @@
+package io.zipcoder.polymorphism.Pets;
+
+public abstract class Pets {
+
+ private String name;
+ public abstract String type();
+ public abstract String speak();
+
+ public Pets(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String toString() {
+ String[] className;
+ className = this.getClass().getName().split("\\.");
+
+ return String.format("\n%s is a %s and sounds like %s",
+ this.getName(), className[className.length - 1], this.speak());
+ }
+
+}
diff --git a/src/main/java/io/zipcoder/polymorphism/main.java b/src/main/java/io/zipcoder/polymorphism/main.java
new file mode 100644
index 0000000..73a4e56
--- /dev/null
+++ b/src/main/java/io/zipcoder/polymorphism/main.java
@@ -0,0 +1,12 @@
+package io.zipcoder.polymorphism;
+
+public class main {
+
+ public static void main(String[] args) {
+
+ MainApplication newMain = new MainApplication();
+
+ newMain.run();
+
+ }
+}
diff --git a/src/test/java/io/zipcoder/polymorphism/MainApplicationTest.java b/src/test/java/io/zipcoder/polymorphism/MainApplicationTest.java
index 7181623..9275ac5 100644
--- a/src/test/java/io/zipcoder/polymorphism/MainApplicationTest.java
+++ b/src/test/java/io/zipcoder/polymorphism/MainApplicationTest.java
@@ -1,7 +1,48 @@
package io.zipcoder.polymorphism;
+import org.junit.Assert;
+import org.junit.Test;
/**
* Created by leon on 11/6/17.
*/
public class MainApplicationTest {
+ MainApplication testApp = new MainApplication();
+
+ @Test
+ public void addPet() {
+
+ testApp.getTypes(2);
+ int expected = 2;
+ int actual = testApp.setOfPets.length;
+
+ Assert.assertEquals(expected,actual);
+ }
+
+ @Test
+ public void printPets() {
+// testApp.addPet("Cat");
+// testApp.addPet("Dog");
+//
+// String expected = "No name cat";
+// String actual = testApp.petList.get(0).getName();
+// Assert.assertEquals(expected,actual);
+//
+// expected = "No name dog";
+// actual = testApp.petList.get(1).getName();
+// Assert.assertEquals(expected,actual);
+ }
+
+ // ****************************
+
+ @Test
+ public void getNumberOfPets() {
+ }
+
+ @Test
+ public void getTypes() {
+ }
+
+ @Test
+ public void getName() {
+ }
}