diff --git a/pom.xml b/pom.xml
index 93036ba..0becdea 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,6 +7,32 @@
io.zipcoder
polymorphism
1.0-SNAPSHOT
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 6
+ 6
+
+
+
+
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
\ No newline at end of file
diff --git a/src/main/java/io/zipcoder/pets/Cat.java b/src/main/java/io/zipcoder/pets/Cat.java
new file mode 100644
index 0000000..7b08676
--- /dev/null
+++ b/src/main/java/io/zipcoder/pets/Cat.java
@@ -0,0 +1,12 @@
+package io.zipcoder.pets;
+
+public class Cat extends Pet {
+ //private static final String name = "";
+ public Cat(String type, String name) {
+ super(type, name);
+ }
+
+ public String speak() {
+ return "Meow!";
+ }
+}
diff --git a/src/main/java/io/zipcoder/pets/Dog.java b/src/main/java/io/zipcoder/pets/Dog.java
new file mode 100644
index 0000000..987ee70
--- /dev/null
+++ b/src/main/java/io/zipcoder/pets/Dog.java
@@ -0,0 +1,14 @@
+package io.zipcoder.pets;
+
+public class Dog extends Pet {
+ // private static String name = "";
+
+ public Dog(String type, String name) {
+ super(type, name);
+ }
+
+ @Override
+ public String speak() {
+ return "Ruff Ruff";
+ }
+}
diff --git a/src/main/java/io/zipcoder/pets/Hampster.java b/src/main/java/io/zipcoder/pets/Hampster.java
new file mode 100644
index 0000000..2c3e6c7
--- /dev/null
+++ b/src/main/java/io/zipcoder/pets/Hampster.java
@@ -0,0 +1,13 @@
+package io.zipcoder.pets;
+
+public class Hampster extends Pet {
+
+ public Hampster(String type, String name) {
+ super(type, name);
+ }
+
+ @Override
+ public String speak() {
+ return "Squeak, Squeak.";
+ }
+}
diff --git a/src/main/java/io/zipcoder/pets/Pet.java b/src/main/java/io/zipcoder/pets/Pet.java
new file mode 100644
index 0000000..2ee0a0d
--- /dev/null
+++ b/src/main/java/io/zipcoder/pets/Pet.java
@@ -0,0 +1,36 @@
+package io.zipcoder.pets;
+
+import io.zipcoder.polymorphism.Animal;
+
+public abstract class Pet implements Animal {
+ private String name;
+ private String type;
+
+ protected Pet() {
+ }
+
+ public Pet(String type, String name) {
+ this.type = type;
+ this.name = name;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String speak() {
+ return "";
+ }
+}
diff --git a/src/main/java/io/zipcoder/polymorphism/Animal.java b/src/main/java/io/zipcoder/polymorphism/Animal.java
new file mode 100644
index 0000000..b9a1461
--- /dev/null
+++ b/src/main/java/io/zipcoder/polymorphism/Animal.java
@@ -0,0 +1,5 @@
+package io.zipcoder.polymorphism;
+
+public interface Animal {
+ String speak();
+}
diff --git a/src/main/java/io/zipcoder/polymorphism/MainApplication.java b/src/main/java/io/zipcoder/polymorphism/MainApplication.java
index ea9281e..2182aba 100644
--- a/src/main/java/io/zipcoder/polymorphism/MainApplication.java
+++ b/src/main/java/io/zipcoder/polymorphism/MainApplication.java
@@ -1,7 +1,44 @@
package io.zipcoder.polymorphism;
+
+import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
+import io.zipcoder.pets.Cat;
+import io.zipcoder.pets.Dog;
+import io.zipcoder.pets.Hampster;
+import io.zipcoder.pets.Pet;
+import javax.crypto.spec.PSource;
+import javax.xml.namespace.QName;
+import java.util.ArrayList;
+import java.util.Scanner;
+
/**
* Created by leon on 11/6/17.
*/
public class MainApplication {
+
+ public static void main(String[] args) {
+ String petType, petName;
+ ArrayList petArrayList = new ArrayList();
+ Scanner scanner = new Scanner(System.in);
+ System.out.println("How many pets do you have?");
+ int numberOfPets = scanner.nextInt();
+
+ for(int i = 1; i <= numberOfPets; i++) {
+ System.out.println("What kind of pet?");
+ petType = scanner.next();
+ System.out.println("Enter pet's name.");
+ petName = scanner.next();
+ if ("dog".equals(petType.toLowerCase())) {
+ petArrayList.add(new Dog(petType, petName));
+ } else if ("cat".equals(petType.toLowerCase())) {
+ petArrayList.add(new Cat(petType, petName));
+ } else if ("hampster".equals(petType.toLowerCase())) {
+ petArrayList.add(new Hampster(petType, petName));
+ }
+ }
+ for (Pet petObj : petArrayList) {
+ System.out.println(petObj.getName() + " " + petObj.speak());
+
+ }
+ }
}
diff --git a/src/test/java/io/zipcoder/pets/CatTest.java b/src/test/java/io/zipcoder/pets/CatTest.java
new file mode 100644
index 0000000..01a9855
--- /dev/null
+++ b/src/test/java/io/zipcoder/pets/CatTest.java
@@ -0,0 +1,31 @@
+package io.zipcoder.pets;
+
+import io.zipcoder.polymorphism.Animal;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class CatTest extends Pet {
+
+ @Test
+ public void testGetName() {
+ Pet pet = new Cat("cat", "Sylvester");
+ String expected = "Sylvester";
+ String actual = pet.getName();
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testSpeak() {
+ Pet pet = new Cat("cat", "Socks");
+ String expected = "Meow!";
+ String actual = pet.speak();
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void inheritanceTest() {
+ Cat TestCat = new Cat("cat", "Fluffy");
+ Assert.assertTrue(TestCat instanceof Pet);
+ Assert.assertTrue(TestCat instanceof Cat);
+ }
+}
diff --git a/src/test/java/io/zipcoder/pets/DogTest.java b/src/test/java/io/zipcoder/pets/DogTest.java
new file mode 100644
index 0000000..a5bc6d5
--- /dev/null
+++ b/src/test/java/io/zipcoder/pets/DogTest.java
@@ -0,0 +1,30 @@
+package io.zipcoder.pets;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class DogTest extends Pet {
+
+ @Test
+ public void inheritanceTest() {
+ Dog TestDog = new Dog("dog", "Rex");
+ Assert.assertTrue(TestDog instanceof Pet);
+ Assert.assertTrue(TestDog instanceof Dog);
+ }
+
+ @Test
+ public void testGetName() {
+ Pet pet = new Dog("dog", "X");
+ String expected = "X";
+ String actual = pet.getName();
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testSpeak() {
+ Pet pet = new Dog("dog", "XX");
+ String expected = "Ruff Ruff";
+ String actual = pet.speak();
+ Assert.assertEquals(expected, actual);
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/io/zipcoder/pets/HampsterTest.java b/src/test/java/io/zipcoder/pets/HampsterTest.java
new file mode 100644
index 0000000..dd4521f
--- /dev/null
+++ b/src/test/java/io/zipcoder/pets/HampsterTest.java
@@ -0,0 +1,32 @@
+package io.zipcoder.pets;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class HampsterTest extends Pet {
+
+ @Test
+ public void testGetName() {
+ Pet pet = new Hampster("hampster", "Apple");
+ String expected = "Apple";
+ String actual = pet.getName();
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testSpeak() {
+ Pet pet = new Hampster("hampster", "Elvis");
+ String expected = "Squeak, Squeak.";
+ String actual = pet.speak();
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void inheritanceTest() {
+ Hampster TestHampster = new Hampster("hampster", "Earl");
+ Assert.assertTrue(TestHampster instanceof Pet);
+ Assert.assertTrue(TestHampster instanceof Hampster);
+
+ }
+}
+
diff --git a/src/test/java/io/zipcoder/polymorphism/MainApplicationTest.java b/src/test/java/io/zipcoder/polymorphism/MainApplicationTest.java
index 7181623..d414497 100644
--- a/src/test/java/io/zipcoder/polymorphism/MainApplicationTest.java
+++ b/src/test/java/io/zipcoder/polymorphism/MainApplicationTest.java
@@ -1,7 +1,37 @@
package io.zipcoder.polymorphism;
+import io.zipcoder.pets.Cat;
+import io.zipcoder.pets.Dog;
+import io.zipcoder.pets.Hampster;
+import io.zipcoder.pets.Pet;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.ArrayList;
+
/**
* Created by leon on 11/6/17.
*/
public class MainApplicationTest {
+ Pet testHamster = new Hampster("hampster", "Apple");
+ Pet testCat = new Cat("cat", "Sylvester");
+ Pet testDog = new Dog("dog", "XX");
+ ArrayList petArrayList = new ArrayList();
+
+ @Test
+ public void ArrayListTest() {
+ petArrayList.add(testDog);
+ Integer expected = 1;
+ Integer actual = petArrayList.size();
+ Assert.assertEquals(actual, expected);
+ }
+ @Test
+ public void ArrayListTest2() {
+ petArrayList.add(testCat);
+ petArrayList.add(testHamster);
+ Integer expected = 2;
+ Integer actual = petArrayList.size();
+ Assert.assertEquals (actual, expected);
+ }
}