//Student.java

public class Student extends Person
{
    private int studentNumber;

    public Student()
    {
        super();
        studentNumber = 0; //Indicating no number yet
    }
    public Student
    (
        String initialName,
        int initialStudentNumber
    )
    {
        super(initialName);
        studentNumber = initialStudentNumber;
    }

    public void reset
    (
        String newName,
        int newStudentNumber
    )
    {
        //super.name = newStudentName;  //can't do this ... why not?
        super.setName(newName);
        studentNumber = newStudentNumber;
    }

    public int getStudentNumber()
    {
        return studentNumber;
    }

    public void setStudentNumber
    (
        int newStudentNumber
    )
    {
        studentNumber = newStudentNumber;
    }

    public void writeOutput()
    {
        super.writeOutput();
        //System.out.println("Name: " + getName());
        System.out.println("Student Number: " + studentNumber);
    }

/*
*/
    public boolean equals
    (
        Student otherStudent
    )
    {
        return this.hasSameName(otherStudent) &&
              (this.studentNumber == otherStudent.studentNumber);
    }

    public String toString()
    {
        return "Name: " + getName() +
               "\nStudent number: "  + studentNumber;
    }

    public static void main(String[] args)
    {
        System.out.println("1===============");
        Student s1 = new Student();
        Student s2 = new Student();
        System.out.println(s1 == s2);
        System.out.println(s1.equals(s2));
        String s3 = "Joe";
        System.out.println(s1.equals(s3));
        //Student s4 = null;
        //System.out.println(s1.equals(s4));

        System.out.println("2===============");
        s1.writeOutput();
        System.out.println(s1);  //What does this print and why?
    }
}



 /* 
  * A much better equals() method definition
  *
    public boolean equals(Object otherObject)
    {
        if (otherObject == null)
            return false;
        else if (!(otherObject instanceof Student))
            return false;
        else
        {
            Student otherStudent = (Student)otherObject;
            return (this.hasSameName(otherStudent)
                && (this.studentNumber ==
                    otherStudent.studentNumber));
        }
    }
*/
