public abstract class Person {

    public String name_;    
    public int idNum_;
    
    public Person() {
        name_ = "John Doe";
        System.out.println("A John Doe was created");
    }
    
    public Person(String name, int idNum) {
        name_ = name;
        idNum_ = idNum;
        System.out.println("A person with a given name and id created");
    }
    
    public int getIdNum() {
        return idNum_;
    }
    
    public void whoAmI() {
        System.out.println("I am a ...");
        if (this instanceof Person) {
            System.out.println("person");
        }
        if (this instanceof Student) {
            System.out.println("student");
        }
        if (this instanceof StudentTutor) {
            System.out.println("student tutor");
        }
    }
    
    public abstract String greeting();
    
    public String toString() {
        return "person " + idNum_ + " named " + name_;
    }
    
    public boolean equals(Object o) {
        if (o instanceof Person) {
            return this.idNum_ == ((Person) o).getIdNum();
        }
        return false;
    }
}
