Java/C3/Polymorphism/English-timed
Time | Narration |
00:01 | Welcome to the spoken-tutorial on Polymorphism in Java. |
00:06 | In this tutorial, we will learn about:
Polymorphism in Java Run-time polymorphism Virtual Method Invocation and Compile-time polymorphism. |
00:19 | Here we are using:
Ubuntu Linux Version 12.04 JDK Version 1.7 and Eclipse 4.3.1 |
00:31 | To follow this tutorial, you must have basic knowledge of Java and Eclipse IDE. |
00:37 | You must have knowledge of Subclassing & Method overriding and overloading. |
00:43 | If not, for relevant Java tutorials, please visit our website. |
00:48 | Polymorphism is an ability of an object to take on many forms. |
00:54 | The major advantages of Polymorphism are:
1. Reduction of complexity & 2. Code re-usability. |
01:03 | In Java, there are two types of polymorphism: Compile-time and Run-time polymorphism. |
01:11 | Compile-time polymorphism is essentially referred as Method overloading. It is also called Static Binding. |
01:20 | Run-time polymorphism is essentially referred as Method overriding. It is also called Dynamic Binding. |
01:29 | We have already learnt Run-time polymorphism i.e. Method overriding. |
01:35 | Let us switch to Eclipse IDE. I have already created a project named MyProject in the previous tutorial. |
01:44 | Let us take the code files of Using final keyword tutorial. |
01:49 | Employee class is the parent class. |
01:52 | Manager class is the subclass. |
01:55 | Manager class contains an additional variable department. |
02:01 | Manager class method getDetails() overrides the Employee class method getDetails(). |
02:08 | We are calling the getDetails() method by Manager class object i.e. Manager. |
02:16 | In order to print the details, type: system.out.println Details of Manager Class. |
02:28 | Save and run the program. So, we can see department variable value in the output. |
02:37 | Therefore subclass method is invoked at runtime. |
02:42 | Method invocation is determined by the JVM, not compiler. |
02:48 | Therefore it is known as Runtime polymorphism or method overriding. |
02:55 | We learnt what is Run time polymorphism. |
02:58 | Now let us learn Virtual Method Invocation. |
03:03 | Come to Employee class in Eclipse IDE. |
03:07 | Remove the static and final keywords for variable name. |
03:13 | Uncomment the method setName. |
03:16 | Remove the static block. Save the file. |
03:21 | Come to TestEmployee class. Uncomment the value instance, manager.setName(“Nikkita Dinesh”); |
03:31 | We uncommented this instance, as we have uncommented the method setName() in Empolyee class. |
03:38 | Now, let's instantiate Employee object emp1 for Employee class reference. |
03:46 | Type: Employee emp1 = new Employee open and close parenthesis semicolon |
03:57 | Let's initialize the value for setEmail and setName for Employee class. |
04:03 | Type: emp1.setName("Jayesh"); emp1.setEmail("pqr@gmail.com"); |
04:16 | In order to print the employee details, type: System.out.println("Details of Employee class:" emp1.getDetails()) semicolon |
04:37 | Let us instantiate Manager object emp2 for Employee class reference i.e.
type: Employee emp2 = new Manager open and close parenthesis semicolon |
04:54 | We are able to do this because any Java object that pass more than one IS-A test, is polymorphic. |
05:04 | In Java, all objects are polymorphic, since any object will pass the IS-A test for their own type and for the class Object. |
05:16 | A Manager IS-A Employee
A Manager IS-A Manager A Manager IS-A Object. |
05:23 | Only possible way to access an object is through a reference variable. |
05:29 | Reference variables like emp1, emp2 and manager. |
05:36 | Here, we instantiated two Manager objects:
One which references Employee class. And other which references Manager class. |
05:47 | Let’s initialize the values for setEmail, setName and setDepartment using emp2 object. |
05:55 | Type,
emp2.setName("Ankita"); emp2.setEmail(“xyz@gmail.com”); emp2.setDepartment(“IT”); |
06:14 | We see that there is an error, "The method setDepartment(String) is undefined for the type Employee". |
06:23 | This is because, setDepartment method does not exist for Employee class. |
06:30 | So, remove the line: emp2.setDepartment("IT"); |
06:37 | In order to print the details, type: System.out.println("Details of Manager class:" emp2.getDetails()) semicolon |
06:55 | Save and Run the program. |
06:58 | Here in the output, we get the Manager of: as blank. |
07:04 | This is because, we have not initialized department in Manager class using emp2. |
07:12 | For demo purpose, let the default department be IT. |
07:17 | So, go to Manager class and initialize the value for department. |
07:25 | Save and run the program. |
07:28 | We get the output: Employee object referring Employee class, |
07:34 | Manager object referring Employee class & Manager object referring Manager class. |
07:42 | Here we see that the getDetails() method of Manager class is called by emp2. |
07:49 | But when emp2 tried calling setDepartment, we got an error. |
07:54 | The reason for that is as follows:
The compiler sees the getDetails() method in the Employee class during emp2.getDetails(). |
08:05 | So, it does not throw an error and validates the code. |
08:10 | At run time, however, the JVM invokes getDetails() in the Manager class as getDetails() of Manager class overrides getDetails() of Employee class. |
08:24 | So, we get the output as per getDetails() of Manager class. But the compiler does not see the setDepartment method in the Employee class. |
08:36 | Therefore, it raises an error in case of setDepartment call by emp2. |
08:43 | Here, Employee method getDetails() is invoked for Employee class. |
08:49 | The compiler references Employee class for getDetails() during emp1.getDetails(). |
08:57 | At run time, the JVM invokes getDetails() in the Employee class. So, we get the output as per getDetails() of Employee class. |
09:08 | Thus the JVM calls the appropriate method for the object that is referred to in each variable. |
09:16 | This behavior is referred to as Virtual Method Invocation. |
09:21 | The methods are referred to as Virtual Methods. |
09:26 | All methods in Java behave in this manner. |
09:31 | We successfully learnt what is Virtual Method Invocation. |
09:36 | We have already learnt Compile-time polymorphism i.e. method overloading. |
09:42 | Let us quickly know Compile time polymorphism in brief. |
09:47 | In Compile time polymorphism, class can have more than one method. |
09:53 | The methods have same name but with different number of arguments. |
09:59 | Compiler is able to figure out the method call at compile-time. That’s the reason it is known as compile time polymorphism. |
10:09 | So, let us summarize. |
10:11 | In this tutorial, we learnt: What is Polymorphism in Java?
Run-time polymorphism Virtual Method Invocation and Compile-time polymorphism. |
10:23 | As an assignment,
Override methods for Vehicle and Bike class which we used in previous tutorials. |
10:32 | The video available at the following link summarizes the Spoken Tutorial project. Please watch it. |
10:40 | The Spoken Tutorial Project Team: conducts workshops and gives certificates to those who pass an online test.
For more details, please write to us. |
10:51 | Spoken Tutorial Project is supported by NMEICT, MHRD, Government of India. More information on this mission is available at this link. |
11:03 | Thats it for the tutorial. This is Trupti Kini from IIT Bombay, signing off. Thank you for joining. |