diff --git a/pom.xml b/pom.xml
index 93036ba..90c23e3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,6 +7,14 @@
io.zipcoder
polymorphism
1.0-SNAPSHOT
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
\ No newline at end of file
diff --git a/src/main/java/io/zipcoder/polymorphism/Cat.java b/src/main/java/io/zipcoder/polymorphism/Cat.java
new file mode 100644
index 0000000..e8a9906
--- /dev/null
+++ b/src/main/java/io/zipcoder/polymorphism/Cat.java
@@ -0,0 +1,13 @@
+package io.zipcoder.polymorphism;
+
+public class Cat extends Pet {
+
+ public Cat(String name){
+ super(name);
+ }
+
+ public String speak(){
+ return "meow";
+ }
+
+}
diff --git a/src/main/java/io/zipcoder/polymorphism/Dog.java b/src/main/java/io/zipcoder/polymorphism/Dog.java
new file mode 100644
index 0000000..52d1a5c
--- /dev/null
+++ b/src/main/java/io/zipcoder/polymorphism/Dog.java
@@ -0,0 +1,13 @@
+package io.zipcoder.polymorphism;
+
+public class Dog extends Pet {
+
+ public Dog(String name){
+ super(name);
+ }
+
+ public String speak(){
+ return "bark";
+ }
+
+}
diff --git a/src/main/java/io/zipcoder/polymorphism/Fish.java b/src/main/java/io/zipcoder/polymorphism/Fish.java
new file mode 100644
index 0000000..94674db
--- /dev/null
+++ b/src/main/java/io/zipcoder/polymorphism/Fish.java
@@ -0,0 +1,12 @@
+package io.zipcoder.polymorphism;
+
+public class Fish extends Pet {
+
+ public Fish(String name){
+ super(name);
+ }
+
+ public String speak(){
+ return "glub";
+ }
+}
diff --git a/src/main/java/io/zipcoder/polymorphism/GuineaPig.java b/src/main/java/io/zipcoder/polymorphism/GuineaPig.java
new file mode 100644
index 0000000..42da556
--- /dev/null
+++ b/src/main/java/io/zipcoder/polymorphism/GuineaPig.java
@@ -0,0 +1,13 @@
+package io.zipcoder.polymorphism;
+
+public class GuineaPig extends Pet {
+
+ public GuineaPig(String name){
+ super(name);
+ }
+
+ public String speak(){
+ return "wheek";
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/io/zipcoder/polymorphism/MainApplication.java b/src/main/java/io/zipcoder/polymorphism/MainApplication.java
index ea9281e..4ba9a37 100644
--- a/src/main/java/io/zipcoder/polymorphism/MainApplication.java
+++ b/src/main/java/io/zipcoder/polymorphism/MainApplication.java
@@ -1,7 +1,58 @@
package io.zipcoder.polymorphism;
+import java.util.ArrayList;
+import java.util.Scanner;
+
/**
* Created by leon on 11/6/17.
*/
public class MainApplication {
+
+private static ArrayList pets;
+
+ public static void main(String[] args) {
+ Integer numOfPets = getInteger("How many pets do you have?");
+ ArrayList pet = new ArrayList();
+ pets = pet;
+
+
+ for(int i = 0; i < numOfPets; i++) {
+ String species = getStringInput("What kind of pet?");
+ String name = getStringInput("What is their name?");
+ if(species.equals("cat")) {
+ pets.add(new Cat(name));
+ }
+ else if(species.equals("dog")) {
+ pets.add(new Dog(name));
+ }
+ else if(species.equals("guineapig")){
+ pets.add(new GuineaPig(name));
+ }
+ else{
+ pets.add(new Fish(name));
+ }
+ }
+
+
+ printPets();
+
+ }
+ public static String getStringInput(String prompt){
+ Scanner scanner = new Scanner(System.in);
+ System.out.println(prompt);
+ String userInput = scanner.nextLine();
+ return userInput;
+ }
+
+ public static Integer getInteger(String prompt) {
+ Scanner scanner = new Scanner(System.in);
+ System.out.println(prompt);
+ String userInput = scanner.nextLine();
+ return Integer.parseInt(userInput);
+ }
+ public static void printPets(){
+ for(Pet p : pets) {
+ System.out.println(p.getName()+ " "+ p.speak());
+ }
+ }
}
diff --git a/src/main/java/io/zipcoder/polymorphism/Pet.java b/src/main/java/io/zipcoder/polymorphism/Pet.java
new file mode 100644
index 0000000..4e738b1
--- /dev/null
+++ b/src/main/java/io/zipcoder/polymorphism/Pet.java
@@ -0,0 +1,25 @@
+package io.zipcoder.polymorphism;
+
+public abstract class Pet {
+
+ private String name;
+
+
+ public Pet(String name){
+ this.name = name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+
+ public String getName(){
+ return name;
+ }
+
+ public abstract String speak();
+
+}
+
+
diff --git a/src/test/java/io/zipcoder/polymorphism/CatTest.java b/src/test/java/io/zipcoder/polymorphism/CatTest.java
new file mode 100644
index 0000000..09c0357
--- /dev/null
+++ b/src/test/java/io/zipcoder/polymorphism/CatTest.java
@@ -0,0 +1,24 @@
+package io.zipcoder.polymorphism;
+
+import org.junit.Test;
+import org.junit.Assert;
+
+public class CatTest
+{
+ @Test
+ public void CatTest()
+ {
+ Cat name = new Cat("fluffy");
+ String actual = name.getName();
+ String expected = "fluffy";
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void SpeechTest()
+ {
+ String actual = new Cat("fluffy").speak();
+ String expected = "meow";
+ Assert.assertEquals(expected, actual);
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/io/zipcoder/polymorphism/DogTest.java b/src/test/java/io/zipcoder/polymorphism/DogTest.java
new file mode 100644
index 0000000..98e2514
--- /dev/null
+++ b/src/test/java/io/zipcoder/polymorphism/DogTest.java
@@ -0,0 +1,24 @@
+package io.zipcoder.polymorphism;
+
+ import org.junit.Test;
+ import org.junit.Assert;
+
+public class DogTest
+{
+ @Test
+ public void DogTest()
+ {
+ Dog name = new Dog("clifford");
+ String actual = name.getName();
+ String expected = "clifford";
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void SpeechTest()
+ {
+ String actual = new Dog("cliffors").speak();
+ String expected = "bark";
+ Assert.assertEquals(expected, actual);
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/io/zipcoder/polymorphism/FishTest.java b/src/test/java/io/zipcoder/polymorphism/FishTest.java
new file mode 100644
index 0000000..b6ad4c3
--- /dev/null
+++ b/src/test/java/io/zipcoder/polymorphism/FishTest.java
@@ -0,0 +1,24 @@
+package io.zipcoder.polymorphism;
+
+import org.junit.Test;
+import org.junit.Assert;
+
+public class FishTest
+{
+ @Test
+ public void FishTest()
+ {
+ Fish name = new Fish("nemo");
+ String actual = name.getName();
+ String expected = "nemo";
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void SpeechTest()
+ {
+ String actual = new Fish("nemo").speak();
+ String expected = "glub";
+ Assert.assertEquals(expected, actual);
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/io/zipcoder/polymorphism/GuineaPigTest.java b/src/test/java/io/zipcoder/polymorphism/GuineaPigTest.java
new file mode 100644
index 0000000..7c9be88
--- /dev/null
+++ b/src/test/java/io/zipcoder/polymorphism/GuineaPigTest.java
@@ -0,0 +1,24 @@
+package io.zipcoder.polymorphism;
+
+import org.junit.Test;
+import org.junit.Assert;
+
+public class GuineaPigTest
+{
+ @Test
+ public void GuineaPigTest()
+ {
+ GuineaPig name = new GuineaPig("whiskers");
+ String actual = name.getName();
+ String expected = "whiskers";
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void SpeechTest()
+ {
+ String actual = new GuineaPig("whiskers").speak();
+ String expected = "wheek";
+ Assert.assertEquals(expected, actual);
+ }
+}