Search code examples
javaoopinheritancecasting

How to narrow cast parent class to child class


I am creating a University Management system where I have a Database class where I store the currentUser object of class User. Upon a successful login currentUser object becomes a Student or a Teacher object (which are User's children). But when I try to call Student's method on the currentUser object it doesn't work.

here is the object currentUser: public static User currentUser; so the currentUser is not initialized and I don't want to downCast it at this stage,

this is how I authorize a user: `

if(student.getLogin().equals(login) && student.getPassword().equals(password)) {
                    currentUser = student;
                    isLogedIn = true;
                }

`

I tried type casting User to Student like this: `

currentUser = student;
                    currentUser = (Student) currentUser;

` but I still can't call Student methods on currentUser. How can I fix it?


Solution

  • currentUser is a variable of type User, so you can only use its (and its parents') method through it.

    You could cast the actual instance to a Student and store it in a temporary variable of that type to use Student's methods:

    Student currentStudent = (Student) currentUser;
    currentStudent.someStudentMethod();
    

    Of course, you can also omit the storing and call the method directly on the cast instance:

    ((Student) currentUser).someStudentMethod();