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 } }