
/**
 * A simplified Student class to demonstrate inheritance from Person.
 * This class has public and private methods.
 * Undergrad and GradStudent extend this class.
 *
 * @author Mark Young (A00000000)
 */
public class Student extends Person {

    public final String A_NUMBER;
    private int grade;

    public static final int MAX_GRADE = 100;
    private static int numStudents = 0;

    public Student(String n) {
        super(n);   // set my name AS A Person
        grade = 0;
        A_NUMBER = nextANumber();
    }

    public void setGrade(int g) {
        if (isValidGrade(g)) {
            this.grade = g;
        }
    }

    public int getGrade() {
        return this.grade;
    }

    public void publicStudentMethod() {
        System.out.println("\tin publicStudentMethod for " + this);
        publicPersonMethod();
        privateStudentMethod();
        System.out.println("\tpublicStudentMethod done");
    }

    private void privateStudentMethod() {
        System.out.println("\tin privateStudentMethod for " + this);
    }

    @Override
    public void replacedMethod() {
        System.out.println("\tin replacedMethod for the Student " + this);
    }

    @Override
    public void revisedMethod() {
        System.out.println("\tin revisedMethod for the Student " + this);
        super.revisedMethod();
        System.out.println("\trevisedMethod for Student done");
    }

    @Override
    public String toString() {
        return this.getName() + " (" + this.A_NUMBER + ")";
    }

    private boolean isValidGrade(int g) {
        return 0 <= g && g <= MAX_GRADE;
    }

    private String nextANumber() {
        ++numStudents;
        return String.format("A%08d", numStudents);
    }

}
