diff --git a/pom.xml b/pom.xml
index 93036ba..6402c2c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,9 +4,21 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- io.zipcoder
- polymorphism
+ com.zipcodewilmington
+ loop_labs
1.0-SNAPSHOT
+
+ 1.8
+ 1.8
+
+
+
+
+ junit
+ junit
+ 4.12
+
+
\ No newline at end of file
diff --git a/src/main/java/io/zipcoder/polymorphism/Bird.java b/src/main/java/io/zipcoder/polymorphism/Bird.java
new file mode 100644
index 0000000..0a4ef52
--- /dev/null
+++ b/src/main/java/io/zipcoder/polymorphism/Bird.java
@@ -0,0 +1,24 @@
+package io.zipcoder.polymorphism;
+
+public class Bird extends Pet {
+ public Bird(String name){
+ super(name);
+ }
+
+ @Override
+ public String speak() {
+ return "Chirp Chirp";
+ }
+
+ @Override
+ public int compareTo(Pet o) {
+ // do this for remaining pets
+ if (this.getName().compareTo(o.getName()) == 0) {
+ this.getClass().getName(); // class name of this pet
+ o.getClass().getName(); // class name pet o
+ return this.getClass().getName().compareTo(o.getClass().getName());
+ } else {
+ return this.getName().compareTo(o.getName());
+ }
+ }
+}
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..da1e79d
--- /dev/null
+++ b/src/main/java/io/zipcoder/polymorphism/Cat.java
@@ -0,0 +1,25 @@
+package io.zipcoder.polymorphism;
+
+public class Cat extends Pet {
+ public Cat(String name){
+ super(name);
+ }
+
+ @Override
+ public String speak() {
+ return "Meow";
+ }
+
+ @Override
+ public int compareTo(Pet o) {
+ // do this for remaining pets
+ if (this.getName().compareTo(o.getName()) == 0) {
+ this.getClass().getName(); // class name of this pet
+ o.getClass().getName(); // class name pet o
+ return this.getClass().getName().compareTo(o.getClass().getName());
+ } else {
+ return this.getName().compareTo(o.getName());
+ }
+ }
+
+}
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..406d60a
--- /dev/null
+++ b/src/main/java/io/zipcoder/polymorphism/Console.java
@@ -0,0 +1,28 @@
+package io.zipcoder.polymorphism;
+
+import java.util.Scanner;
+
+public class Console {
+
+ public static void print(String output, Object... args) {
+ System.out.printf(output, args);
+ }
+
+ public static void println(String output, Object... args) {
+ print(output + "\n", args);
+ }
+
+ public static String getStringInput(String prompt) {
+ Scanner scanner = new Scanner(System.in);
+ print(prompt);
+ String userInput = scanner.nextLine();
+ return userInput;
+ }
+
+ public static Integer getIntegerInput(String prompt) {
+ Scanner scanner = new Scanner(System.in);
+ print(prompt);
+ Integer userInput = Integer.valueOf(scanner.nextLine());
+ return userInput;
+ }
+}
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..f55e372
--- /dev/null
+++ b/src/main/java/io/zipcoder/polymorphism/Dog.java
@@ -0,0 +1,24 @@
+package io.zipcoder.polymorphism;
+
+public class Dog extends Pet {
+ public Dog(String name){
+ super(name);
+ }
+
+ @Override
+ public String speak() {
+ return "Woof Woof";
+ }
+
+ @Override
+ public int compareTo(Pet o) {
+ // do this for remaining pets
+ if (this.getName().compareTo(o.getName()) == 0) {
+ this.getClass().getName(); // class name of this pet
+ o.getClass().getName(); // class name pet o
+ return this.getClass().getName().compareTo(o.getClass().getName());
+ } else {
+ return this.getName().compareTo(o.getName());
+ }
+ }
+}
diff --git a/src/main/java/io/zipcoder/polymorphism/MainApplication.java b/src/main/java/io/zipcoder/polymorphism/MainApplication.java
index ea9281e..ea33759 100644
--- a/src/main/java/io/zipcoder/polymorphism/MainApplication.java
+++ b/src/main/java/io/zipcoder/polymorphism/MainApplication.java
@@ -1,7 +1,53 @@
package io.zipcoder.polymorphism;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* Created by leon on 11/6/17.
*/
+
public class MainApplication {
+ public static void main(String[] args){
+ Boolean turnOn = true;
+
+ while(turnOn){
+
+ Integer input = Console.getIntegerInput("\nHow many pets do you have?\n");
+ ArrayList petsLog = new ArrayList();
+
+ if(input > 0){
+ for(int i = 0; i < input; i++){
+ String petValue = Console.getStringInput("What kind of animal is pet #" + (i + 1) + "?");
+ String nameValue = Console.getStringInput("What is your pet's name?");
+ switch (petValue){
+ case ("dog"):
+ Dog dog = new Dog(nameValue);
+ petsLog.add(dog);
+ break;
+ case ("cat"):
+ Cat cat = new Cat(nameValue);
+ petsLog.add(cat);
+ break;
+ case ("bird"):
+ Bird bird = new Bird(nameValue);
+ petsLog.add(bird);
+ break;
+ default:
+ System.out.println("Wow, that's a really cool pet...");
+ break;
+ }
+
+ }
+ System.out.println("\n Your pets: \n");
+ for(int i = 0; i < petsLog.size(); i++){
+ System.out.println(petsLog.get(i).getClass().getSimpleName() + " " + petsLog.get(i).getName() + " says: " + petsLog.get(i).speak());
+ }
+
+ }
+ turnOn = false;
+ }
+
+ }
+
}
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..07ff44e
--- /dev/null
+++ b/src/main/java/io/zipcoder/polymorphism/Pet.java
@@ -0,0 +1,27 @@
+package io.zipcoder.polymorphism;
+
+public abstract class Pet implements Comparable{
+ private String name;
+
+ public Pet(String name){
+ this.name = name;
+ }
+
+ public String name(){
+ return name;
+ }
+
+ public String speak(){
+ return "";
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+
+}
diff --git a/src/main/java/io/zipcoder/polymorphism/PetComparator.java b/src/main/java/io/zipcoder/polymorphism/PetComparator.java
new file mode 100644
index 0000000..61c8d9c
--- /dev/null
+++ b/src/main/java/io/zipcoder/polymorphism/PetComparator.java
@@ -0,0 +1,17 @@
+package io.zipcoder.polymorphism;
+
+import java.util.Comparator;
+
+public class PetComparator implements Comparator {
+
+
+ @Override
+ public int compare(Pet o1, Pet o2) {
+ // do this for remaining pets?
+ if (o1.getClass().getName().compareTo(o2.getClass().getName()) == 0) {
+ return o1.getName().compareTo(o2.getName());
+ } else {
+ return o1.getClass().getName().compareTo(o2.getClass().getName());
+ }
+ }
+}
diff --git a/src/test/java/io/zipcoder/polymorphism/BirdTest.java b/src/test/java/io/zipcoder/polymorphism/BirdTest.java
new file mode 100644
index 0000000..f973e71
--- /dev/null
+++ b/src/test/java/io/zipcoder/polymorphism/BirdTest.java
@@ -0,0 +1,59 @@
+package io.zipcoder.polymorphism;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class BirdTest {
+ @Test
+ public void nameTest() {
+ // Given
+ Bird bird = new Bird("BlueJay");
+ String expected = "BlueJay";
+
+ // When
+ String actual = bird.name();
+
+ // Then
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void speakTest() {
+ // Given
+ Bird bird = new Bird("BlueJay");
+ String expected = "Chirp Chirp";
+
+ // When
+ String actual = bird.speak();
+
+ // Then
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void compareToTest() {
+ // Given
+ Bird bird = new Bird("BlueJay");
+ Cat cat = new Cat("Tiger");
+
+ // When
+ Integer actual = bird.compareTo(cat);
+
+ // Then
+ Assert.assertTrue(actual<0);
+ }
+
+ @Test
+ public void compareToByNameTest() {
+ // Given
+ Bird bird = new Bird("BlueJay");
+ Dog dog = new Dog("BlueJay");
+
+ // When
+ Integer actual = bird.compareTo(dog);
+
+ // Then
+ Assert.assertTrue(actual<0);
+ }
+
+}
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..31382e7
--- /dev/null
+++ b/src/test/java/io/zipcoder/polymorphism/CatTest.java
@@ -0,0 +1,59 @@
+package io.zipcoder.polymorphism;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class CatTest {
+ @Test
+ public void nameTest() {
+ // Given
+ Cat cat = new Cat("Val");
+ String expected = "Val";
+
+ // When
+ String actual = cat.name();
+
+ // Then
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void speakTest() {
+ // Given
+ Cat cat = new Cat("Valerie");
+ String expected = "Meow";
+
+ // When
+ String actual = cat.speak();
+
+ // Then
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void compareToTest() {
+ // Given
+ Cat cat = new Cat("Tiger");
+ Dog dog = new Dog("Bobby");
+
+ // When
+ Integer actual = cat.compareTo(dog);
+
+ // Then
+ Assert.assertTrue(actual>0);
+ }
+
+ @Test
+ public void compareToByNameTest() {
+ // Given
+ Cat cat = new Cat("Tiger");
+ Dog dog = new Dog("Tiger");
+
+ // When
+ Integer actual = cat.compareTo(dog);
+
+ // Then
+ Assert.assertTrue(actual<0);
+ }
+
+}
diff --git a/src/test/java/io/zipcoder/polymorphism/ComparatorTest.java b/src/test/java/io/zipcoder/polymorphism/ComparatorTest.java
new file mode 100644
index 0000000..084eefb
--- /dev/null
+++ b/src/test/java/io/zipcoder/polymorphism/ComparatorTest.java
@@ -0,0 +1,51 @@
+package io.zipcoder.polymorphism;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class ComparatorTest {
+
+ @Test
+ public void compareToTest() {
+ // Given
+ Cat cat = new Cat("Tiger");
+ Dog dog = new Dog("Bobby");
+
+ // When
+ PetComparator petComp = new PetComparator();
+ Integer actual = petComp.compare(cat, dog);
+
+ // Then
+ Assert.assertTrue(actual<0);
+ }
+
+ @Test
+ public void compareToTest2() {
+ // Given
+ Cat cat = new Cat("Tiger");
+ Cat cat2 = new Cat("Tiger");
+
+ // When
+ PetComparator petComp = new PetComparator();
+ Integer actual = petComp.compare(cat, cat2);
+
+ // Then
+ Assert.assertTrue(actual==0);
+ }
+
+ @Test
+ public void compareToTest3() {
+ // Given
+ Bird bird = new Bird("BlueJay");
+ Dog dog = new Dog("Bobby");
+
+ // When
+ PetComparator petComp = new PetComparator();
+ Integer actual = petComp.compare(bird, dog);
+
+ // Then
+ Assert.assertTrue(actual<0);
+ }
+
+
+}
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..b3cfeeb
--- /dev/null
+++ b/src/test/java/io/zipcoder/polymorphism/DogTest.java
@@ -0,0 +1,60 @@
+package io.zipcoder.polymorphism;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class DogTest {
+ public String name;
+ @Test
+ public void nameTest() {
+ // Given
+ Dog dog = new Dog("John");
+ String expected = "John";
+
+ // When
+ String actual = dog.name();
+
+ // Then
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void speakTest() {
+ // Given
+ Dog dog = new Dog("John");
+ String expected = "Woof Woof";
+
+ // When
+ String actual = dog.speak();
+
+ // Then
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void compareToTest() {
+ // Given
+ Dog dog = new Dog("Bobby");
+ Cat cat = new Cat("Tiger");
+
+ // When
+ Integer actual = dog.compareTo(cat);
+
+ // Then
+ Assert.assertTrue(actual<0);
+ }
+
+ @Test
+ public void compareToByNameTest() {
+ // Given
+ Bird bird = new Bird("Bobby");
+ Dog dog = new Dog("Bobby");
+
+ // When
+ Integer actual = dog.compareTo(bird);
+
+ // Then
+ Assert.assertTrue(actual>0);
+ }
+
+}
diff --git a/src/test/java/io/zipcoder/polymorphism/MainApplicationTest.java b/src/test/java/io/zipcoder/polymorphism/MainApplicationTest.java
index 7181623..64a6d8e 100644
--- a/src/test/java/io/zipcoder/polymorphism/MainApplicationTest.java
+++ b/src/test/java/io/zipcoder/polymorphism/MainApplicationTest.java
@@ -4,4 +4,6 @@
* Created by leon on 11/6/17.
*/
public class MainApplicationTest {
+
+
}