What we have seen regarding compatibility between superclass and subclass applies also to parameter passing.
public class TestCompatibility2 {
public static void printPerson(Person p) {
System.out.println(p.getName());
System.out.println(p.getResidence());
}
public static void printStudent(Student s) {
System.out.println(s.getName());
System.out.println(s.getResidence());
System.out.println(s.getFaculty());
}
public static void main(String args[]) {
Person pr = new Person("Daniele", "Roma");
Student st = new Student("Jacopo", "Roma", "Engineering");
printPerson(pr); //OK
printPerson(st); //OK! Student is compatible with Person
printStudent(st); //OK
printStudent(pr); //ERROR! Person is not compatible with Student
}
}