diff --git a/Nathan.md b/Nathan.md
new file mode 100644
index 0000000..f2d0a82
--- /dev/null
+++ b/Nathan.md
@@ -0,0 +1 @@
+##This is Nathan's Project
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 62dbb86..b118c92 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,6 +5,18 @@
io.zipcoder
polymorphism-1
0.0.1-SNAPSHOT
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 11
+ 11
+
+
+
+
jar
interfaces-1
diff --git a/src/main/java/io/zipcoder/pets/Animal.java b/src/main/java/io/zipcoder/pets/Animal.java
new file mode 100644
index 0000000..6e3ab7c
--- /dev/null
+++ b/src/main/java/io/zipcoder/pets/Animal.java
@@ -0,0 +1,6 @@
+package io.zipcoder.pets;
+
+public interface Animal {
+ String speak();
+ Integer getId();
+}
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..7337323
--- /dev/null
+++ b/src/main/java/io/zipcoder/pets/Cat.java
@@ -0,0 +1,16 @@
+package io.zipcoder.pets;
+
+public class Cat extends Pet{
+ public Cat(String name, Integer id) {
+ super(name, id);
+ }
+
+ public Cat() {
+ super("Cat", null);
+ }
+
+ @Override
+ 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..00cbcda
--- /dev/null
+++ b/src/main/java/io/zipcoder/pets/Dog.java
@@ -0,0 +1,17 @@
+package io.zipcoder.pets;
+
+public class Dog extends Pet{
+
+ public Dog(String name, Integer id) {
+ super(name, id);
+ }
+
+ public Dog() {
+ super("Dog", null);
+ }
+
+ @Override
+ public String speak(){
+ return "Bark!";
+ }
+}
diff --git a/src/main/java/io/zipcoder/pets/Horse.java b/src/main/java/io/zipcoder/pets/Horse.java
new file mode 100644
index 0000000..7349b8e
--- /dev/null
+++ b/src/main/java/io/zipcoder/pets/Horse.java
@@ -0,0 +1,17 @@
+package io.zipcoder.pets;
+
+public class Horse extends Pet {
+
+ public Horse(String name, Integer id) {
+ super(name, id);
+ }
+
+ public Horse() {
+ super("Horse", null);
+ }
+
+ @Override
+ public String speak(){
+ return "Neigh!";
+ }
+}
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..bdfeb31
--- /dev/null
+++ b/src/main/java/io/zipcoder/pets/Pet.java
@@ -0,0 +1,44 @@
+package io.zipcoder.pets;
+
+public class Pet implements Animal {
+ private String Name;
+ private final Integer Id;
+ private PetOwner Owner;
+
+ public Pet(String name, Integer id) {
+ this.Name = name;
+ this.Id = id;
+ this.Owner = null;
+ }
+
+ public String getName() {
+ return this.Name;
+ }
+
+ public void setName(String name) {
+ this.Name = name;
+ }
+
+ public Integer getId() {
+ return Id;
+ }
+
+// public void setId(Integer id) {
+// this.Id = id;
+// }
+
+ public PetOwner getOwner() {
+ return this.Owner;
+ }
+
+ public void setOwner(PetOwner owner) {
+ this.Owner = owner;
+ }
+
+
+
+
+ public String speak() {
+ return null;
+ }
+}
diff --git a/src/main/java/io/zipcoder/pets/PetOwner.java b/src/main/java/io/zipcoder/pets/PetOwner.java
new file mode 100644
index 0000000..688b02d
--- /dev/null
+++ b/src/main/java/io/zipcoder/pets/PetOwner.java
@@ -0,0 +1,58 @@
+package io.zipcoder.pets;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class PetOwner {
+ private String name;
+ private ArrayList petList = new ArrayList<>();
+ private static Integer ID = 0;
+ //private Integer numberOfPets;
+
+ public PetOwner(String name, int numOfPets) {
+ this.name = name;
+ this.petList = new ArrayList<>();
+ for (int i = 0; i < numOfPets; i++) {
+ petList.add(new Dog("TEST DOG", 90));
+ }
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setNumberOfPets(Integer newNumOfPets) {
+ for (int i = 0; i < newNumOfPets; i++) {
+ petList.add(new Dog("TEST DOG", 80));
+ }
+ }
+
+ public int getNumberOfPets() {
+ return petList.size();
+ }
+
+ public void addPet(Pet pet) {
+ for(Pet element: petList){
+ if(element != pet){
+ element = pet;
+ break;
+ }
+ }
+
+ }
+
+ public Pet getPetById(Integer petId) {
+ for(Pet pet: petList){
+ System.out.println(pet.getId());
+ if(pet.getId() == petId){
+ return pet;
+ }
+ }
+ return null;
+ }
+
+ public void setPetName(Pet pet, String newPetName) {
+
+ }
+}
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..ade99b4
--- /dev/null
+++ b/src/main/java/io/zipcoder/polymorphism/Console.java
@@ -0,0 +1,92 @@
+package io.zipcoder.polymorphism;
+
+import io.zipcoder.pets.Cat;
+import io.zipcoder.pets.Dog;
+import io.zipcoder.pets.Horse;
+import io.zipcoder.pets.Pet;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Scanner;
+
+public class Console {
+ private static List petList = new ArrayList<>();
+ private static Integer count;
+
+ public static void start() {
+ Scanner scanner = new Scanner(System.in);
+ System.out.println("Hello pet owner! How many pets do you have?");
+ //count = getIntegerInput("Hello pet owner! How many pets do you have?");
+ count = scanner.nextInt();
+ int I = 0;
+ while (I < count){
+ System.out.println("What type of pet is your pet # " + (I +1) + " ?\n" +
+ "1.Dog, 2. Cat, 3. Horse");
+ int input = scanner.nextInt();
+// Integer input = getIntegerInput("What type of pet is your pet # " + I + " ?\n" +
+// "1.Dog, 2. Cat, 3. Horse");
+ switch(input) {
+ case 1 :
+ petList.add(new Dog());
+ break;
+ case 2 :
+ petList.add(new Cat());
+ break;
+ case 3 :
+ petList.add(new Horse());
+ break;
+ default :
+ System.out.println("Error! Pick 1, 2 or 3");
+ continue;
+ }
+ I++;
+ }
+
+ }
+
+ public static void getNames(){
+ Scanner scanner = new Scanner(System.in);
+ String input;
+ int I = 0;
+ while (I < count){
+ System.out.println("What is the name of your pet #" + (I + 1) + " who is a " + petList.get(I).getClass().getSimpleName() + "?" );
+ input = scanner.nextLine();
+ petList.get(I).setName(input);
+ I++;
+ }
+ }
+ public static void speak(){
+ System.out.println("You have " + count + " pets.");
+ for(Pet eachPet: petList){
+ System.out.println(eachPet.getName() + " the " + eachPet.getClass().getSimpleName() + " says " + eachPet.speak());
+ }
+ }
+
+ 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);
+ println(prompt);
+ return scanner.nextLine();
+ }
+
+ public static Integer getIntegerInput(String prompt) {
+ Scanner scanner = new Scanner(System.in);
+ println(prompt);
+ return Integer.parseInt(scanner.nextLine());
+ }
+
+ public static Float getFloatInput(String prompt) {
+ Scanner scanner = new Scanner(System.in);
+ println(String.valueOf(prompt));
+ return Float.parseFloat((scanner.nextLine()));
+ }
+
+
+}
diff --git a/src/main/java/io/zipcoder/polymorphism/MainApplication.java b/src/main/java/io/zipcoder/polymorphism/MainApplication.java
index 668c627..6c1edcd 100644
--- a/src/main/java/io/zipcoder/polymorphism/MainApplication.java
+++ b/src/main/java/io/zipcoder/polymorphism/MainApplication.java
@@ -1,4 +1,11 @@
package io.zipcoder.polymorphism;
public class MainApplication {
+
+ public static void main(String[] args) {
+ Console.start();
+ Console.getNames();
+ Console.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..56b879f
--- /dev/null
+++ b/src/test/java/io/zipcoder/pets/CatTest.java
@@ -0,0 +1,55 @@
+package io.zipcoder.pets;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class CatTest {
+ @Test
+ public void constructorTest() {
+ //given
+ String givenName = "Banksy";
+ Integer givenId = 0;
+ //when
+ Cat cat = new Cat(givenName, givenId);
+ String retrievedName = cat.getName();
+ Integer retrievedID = cat.getId();
+ //then
+ Assert.assertEquals(givenName, retrievedName);
+ Assert.assertEquals(givenId, retrievedID);
+ }
+ @Test
+ public void testGetName() {
+ //given
+ String expectedName = "Ony";
+ //when
+ Cat cat = new Cat(expectedName, 2);
+ String actualName = cat.getName();
+ //then
+ Assert.assertEquals(expectedName, actualName);
+ }
+ @Test
+ public void testGetID() {
+ //given
+ Integer expectedId = 1;
+ //when
+ Cat cat = new Cat("Kyo", expectedId);
+ Integer actualId = cat.getId();
+ //then
+ Assert.assertEquals(expectedId, actualId);
+ }
+ @Test
+ public void testSpeak() {
+ //given
+ String expectedSpeak = "Meow!";
+ //when
+ Cat newCat = new Cat("Spooky", 1);
+ String actualSpeak = newCat.speak();
+ //then
+ Assert.assertEquals(expectedSpeak, actualSpeak);
+ }
+ @Test
+ public void testPetInheritance() {
+ Cat newCat = new Cat("Gojo", 2);
+ Assert.assertTrue(newCat instanceof Pet);
+ }
+}
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..8f14da1
--- /dev/null
+++ b/src/test/java/io/zipcoder/pets/DogTest.java
@@ -0,0 +1,56 @@
+package io.zipcoder.pets;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class DogTest {
+ @Test
+ public void constructorTest() {
+ //given
+ String givenName = "Bruno";
+ Integer givenId = 2;
+ //when
+ Dog dog = new Dog(givenName, givenId);
+ String retrievedName = dog.getName();
+ Integer retrievedId = dog.getId();
+ //then
+ Assert.assertEquals(givenName, retrievedName);
+ Assert.assertEquals(givenId, retrievedId);
+ }
+ @Test
+ public void testSetName() {
+ //given
+ String expectedName = "Issa";
+ //when
+ Dog dog = new Dog(expectedName,4);
+ String actualName = dog.getName();
+ //then
+ Assert.assertEquals(expectedName, actualName);
+ }
+ @Test
+ public void testGetId() {
+ //given
+ Integer expectedId = 9;
+ //when
+ Dog dog = new Dog("Shigure", expectedId);
+ Integer actualId = dog.getId();
+ //then
+ Assert.assertEquals(expectedId, actualId);
+
+ }
+ @Test
+ public void testSpeak() {
+ //given
+ String expectedSpeak = "Bark!";
+ //when
+ Dog newDog = new Dog("Coco", 3);
+ String actualSpeak = newDog.speak();
+ //then
+ Assert.assertEquals(expectedSpeak, actualSpeak);
+ }
+ @Test
+ public void testPetInheritance() {
+ Dog newDog = new Dog("Kyo", 7);
+ Assert.assertTrue(newDog instanceof Pet);
+ }
+}
diff --git a/src/test/java/io/zipcoder/pets/HorseTest.java b/src/test/java/io/zipcoder/pets/HorseTest.java
new file mode 100644
index 0000000..811317a
--- /dev/null
+++ b/src/test/java/io/zipcoder/pets/HorseTest.java
@@ -0,0 +1,56 @@
+package io.zipcoder.pets;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class HorseTest {
+ @Test
+ public void constructorTest() {
+ //given
+ String givenName = "Misty";
+ Integer givenId = 3;
+ //when
+ Horse horse = new Horse(givenName, givenId);
+ String retrievedName = horse.getName();
+ Integer retrievedId = horse.getId();
+ //then
+ Assert.assertEquals(givenName, retrievedName);
+ Assert.assertEquals(givenId, retrievedId);
+ }
+ @Test
+ public void testSetName() {
+ //given
+ String expectedName = "Rin";
+ //when
+ Horse horse = new Horse(expectedName, 5);
+ String actualName = horse.getName();
+ //then
+ Assert.assertEquals(expectedName, actualName);
+ }
+ @Test
+ public void testGetId() {
+ //given
+ Integer expectedId = 1;
+ //when
+ Horse horse = new Horse("Flash", expectedId);
+ Integer actualId = horse.getId();
+ //then
+ Assert.assertEquals(expectedId, actualId);
+ }
+ @Test
+ public void testSpeak() {
+ //given
+ String expectedSpeak = "Neigh!";
+ //when
+ Horse newHorse = new Horse("Layla", 2);
+ String actualSpeak = newHorse.speak();
+ //then
+ Assert.assertEquals(expectedSpeak, actualSpeak);
+ }
+ @Test
+ public void testPetInheritance() {
+ Horse newHorse = new Horse("Frank", 4);
+ Assert.assertTrue(newHorse instanceof Pet);
+ }
+
+}
diff --git a/src/test/java/io/zipcoder/pets/PetOwnerTest.java b/src/test/java/io/zipcoder/pets/PetOwnerTest.java
new file mode 100644
index 0000000..b658e3d
--- /dev/null
+++ b/src/test/java/io/zipcoder/pets/PetOwnerTest.java
@@ -0,0 +1,73 @@
+package io.zipcoder.pets;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class PetOwnerTest {
+
+ @Test
+ public void testPetOwnerConstructor() {
+ //given
+ String expectedName = "Kira";
+ //when
+ PetOwner petOwner = new PetOwner(expectedName, 4);
+ String actualName = petOwner.getName();
+ //then
+ Assert.assertEquals(expectedName, actualName);
+ }
+
+ @Test
+ public void testSetNumberOfPets() {
+ //given
+ int expected = 1;
+ PetOwner petOwner = new PetOwner("Annette", expected);
+ //when
+ petOwner.setNumberOfPets(expected);
+ int actual = petOwner.getNumberOfPets();
+
+ //then
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testAddPets() {
+ //given
+ PetOwner petOwner = new PetOwner("Caroline", 0);
+ petOwner.setNumberOfPets(2);
+ Cat cat1 = new Cat("Luna", 0);
+ Cat cat2 = new Cat("Binks", 1);
+ //when
+ petOwner.addPet(cat1);
+ petOwner.addPet(cat2);
+ Pet actualPet = petOwner.getPetById(0);
+ //then
+ Assert.assertEquals(cat1.getName(), actualPet.getName());
+ }
+
+ @Test
+ public void testGetPetById() {
+ //given
+ String expected = "YunYun";
+ PetOwner petOwner = new PetOwner("Rayna", 2);
+ Dog dog = new Dog(expected, 0);
+ Cat cat = new Cat("Sophie", 1);
+ //when
+ Pet actual = petOwner.getPetById(0);
+ //then
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testSetPetName() {
+ //given
+ String expected = "Poppy";
+ PetOwner petOwner = new PetOwner("Peter", 0);
+ petOwner.setNumberOfPets(2);
+ Cat cat = new Cat("Ghost", 0);
+ //when
+ petOwner.setPetName(cat, expected);
+ String actual = cat.getName();
+ //then
+ Assert.assertEquals(expected, actual);
+ }
+}