Created a Contact super class to Phone, Email, and Address
diff --git a/src/seedu/addressbook/data/person/Address.java b/src/seedu/addressbook/data/person/Address.java
index 131d71b..dd8f418 100644
--- a/src/seedu/addressbook/data/person/Address.java
+++ b/src/seedu/addressbook/data/person/Address.java
@@ -4,17 +4,17 @@
 
 /**
  * Represents a Person's address in the address book.
- * Guarantees: immutable; is valid as declared in {@link #isValidAddress(String)}
+ * Guarantees: immutable; is valid as declared in {@link #isValid(String)}
  */
-public class Address {
+public class Address extends Contact {
 
     public static final String EXAMPLE = "123, some street";
     public static final String MESSAGE_ADDRESS_CONSTRAINTS = "Person addresses can be in any format";
     public static final String ADDRESS_VALIDATION_REGEX = ".+";
 
-    public final String value;
-    private boolean isPrivate;
-
+    public boolean isValid(String test) {
+        return test.matches(ADDRESS_VALIDATION_REGEX);
+    }
     /**
      * Validates given address.
      *
@@ -23,37 +23,16 @@
     public Address(String address, boolean isPrivate) throws IllegalValueException {
         String trimmedAddress = address.trim();
         this.isPrivate = isPrivate;
-        if (!isValidAddress(trimmedAddress)) {
+        if (!isValid(trimmedAddress)) {
             throw new IllegalValueException(MESSAGE_ADDRESS_CONSTRAINTS);
         }
         this.value = trimmedAddress;
     }
 
-    /**
-     * Returns true if a given string is a valid person address.
-     */
-    public static boolean isValidAddress(String test) {
-        return test.matches(ADDRESS_VALIDATION_REGEX);
-    }
-
-    @Override
-    public String toString() {
-        return value;
-    }
-
     @Override
     public boolean equals(Object other) {
         return other == this // short circuit if same object
                 || (other instanceof Address // instanceof handles nulls
                 && this.value.equals(((Address) other).value)); // state check
     }
-
-    @Override
-    public int hashCode() {
-        return value.hashCode();
-    }
-
-    public boolean isPrivate() {
-        return isPrivate;
-    }
 }
diff --git a/src/seedu/addressbook/data/person/Contact.java b/src/seedu/addressbook/data/person/Contact.java
new file mode 100644
index 0000000..4e9dce4
--- /dev/null
+++ b/src/seedu/addressbook/data/person/Contact.java
@@ -0,0 +1,22 @@
+package seedu.addressbook.data.person;
+
+public abstract class Contact {
+
+    public String value;
+    public  boolean isPrivate;
+
+    @Override
+    public String toString() {
+        return value;
+    }
+
+    public abstract boolean isValid(String value);
+
+    public boolean isPrivate() {
+        return isPrivate;
+    }
+    @Override
+    public int hashCode() {
+        return value.hashCode();
+    }
+}
diff --git a/src/seedu/addressbook/data/person/Email.java b/src/seedu/addressbook/data/person/Email.java
index ad623b5..6f0ca8a 100644
--- a/src/seedu/addressbook/data/person/Email.java
+++ b/src/seedu/addressbook/data/person/Email.java
@@ -4,17 +4,18 @@
 
 /**
  * Represents a Person's email in the address book.
- * Guarantees: immutable; is valid as declared in {@link #isValidEmail(String)}
+ * Guarantees: immutable; is valid as declared in {@link #isValid(String)}
  */
-public class Email {
+public class Email extends Contact {
 
     public static final String EXAMPLE = "valid@e.mail";
     public static final String MESSAGE_EMAIL_CONSTRAINTS =
             "Person emails should be 2 alphanumeric/period strings separated by '@'";
     public static final String EMAIL_VALIDATION_REGEX = "[\\w\\.]+@[\\w\\.]+";
 
-    public final String value;
-    private boolean isPrivate;
+    public boolean isValid(String test) {
+        return test.matches(EMAIL_VALIDATION_REGEX);
+    }
 
     /**
      * Validates given email.
@@ -24,7 +25,7 @@
     public Email(String email, boolean isPrivate) throws IllegalValueException {
         this.isPrivate = isPrivate;
         String trimmedEmail = email.trim();
-        if (!isValidEmail(trimmedEmail)) {
+        if (!isValid(trimmedEmail)) {
             throw new IllegalValueException(MESSAGE_EMAIL_CONSTRAINTS);
         }
         this.value = trimmedEmail;
@@ -33,14 +34,6 @@
     /**
      * Returns true if the given string is a valid person email.
      */
-    public static boolean isValidEmail(String test) {
-        return test.matches(EMAIL_VALIDATION_REGEX);
-    }
-
-    @Override
-    public String toString() {
-        return value;
-    }
 
     @Override
     public boolean equals(Object other) {
@@ -48,14 +41,4 @@
                 || (other instanceof Email // instanceof handles nulls
                 && this.value.equals(((Email) other).value)); // state check
     }
-
-    @Override
-    public int hashCode() {
-        return value.hashCode();
-    }
-
-
-    public boolean isPrivate() {
-        return isPrivate;
-    }
 }
diff --git a/src/seedu/addressbook/data/person/Phone.java b/src/seedu/addressbook/data/person/Phone.java
index 431a7a8..2753214 100644
--- a/src/seedu/addressbook/data/person/Phone.java
+++ b/src/seedu/addressbook/data/person/Phone.java
@@ -4,16 +4,18 @@
 
 /**
  * Represents a Person's phone number in the address book.
- * Guarantees: immutable; is valid as declared in {@link #isValidPhone(String)}
+ * Guarantees: immutable; is valid as declared in {@link #isValid(String)}
  */
-public class Phone {
+public class Phone extends Contact {
 
     public static final String EXAMPLE = "123456789";
     public static final String MESSAGE_PHONE_CONSTRAINTS = "Person phone numbers should only contain numbers";
     public static final String PHONE_VALIDATION_REGEX = "\\d+";
 
-    public final String value;
-    private boolean isPrivate;
+
+    public boolean isValid(String test) {
+        return test.matches(PHONE_VALIDATION_REGEX);
+    }
 
     /**
      * Validates given phone number.
@@ -23,37 +25,16 @@
     public Phone(String phone, boolean isPrivate) throws IllegalValueException {
         this.isPrivate = isPrivate;
         String trimmedPhone = phone.trim();
-        if (!isValidPhone(trimmedPhone)) {
+        if (!isValid(trimmedPhone)) {
             throw new IllegalValueException(MESSAGE_PHONE_CONSTRAINTS);
         }
         this.value = trimmedPhone;
     }
 
-    /**
-     * Returns true if the given string is a valid person phone number.
-     */
-    public static boolean isValidPhone(String test) {
-        return test.matches(PHONE_VALIDATION_REGEX);
-    }
-
-    @Override
-    public String toString() {
-        return value;
-    }
-
     @Override
     public boolean equals(Object other) {
         return other == this // short circuit if same object
                 || (other instanceof Phone // instanceof handles nulls
                 && this.value.equals(((Phone) other).value)); // state check
     }
-
-    @Override
-    public int hashCode() {
-        return value.hashCode();
-    }
-
-    public boolean isPrivate() {
-        return isPrivate;
-    }
 }