This is the context:
There are 2 classes: `Person` and `Student extends Person`

class Person has 1 method:
`print(Person x) {System.out.println("Person")}` (1)

class Student has 2 methods:

`print(Student x) {System.out.println("Student")}` (2)

and

`print(Person x) {System.out.println("Override")}` (3)

Then I have:

```
Person p = new Student();
Student s = new Student();
p.print(s); // prints 'Override' (*)

```

The explanation i got from the lecture is: Because the declare type is Person, so the compiler will choose the method (1). But the runtime type is Student, so the method (3) overrides it.

**My question is: Why did method (2) not override? The argument type here is Student (from the line (\*)), should the method (2) have been the overriding one?**

Thanks you guys a lot. I appreciate all of your answers