Difference between revisions of "Java/C3/Polymorphism/English-timed"
From Script | Spoken-Tutorial
Sandhya.np14 (Talk | contribs) |
Sandhya.np14 (Talk | contribs) |
||
Line 96: | Line 96: | ||
|- | |- | ||
| 02:08 | | 02:08 | ||
− | | We are calling the '''getDetails()''' method by '''Manager '''class object i.e. '''Manager.''' | + | | We are calling the '''getDetails()''' method by '''Manager '''class '''object''' i.e. '''Manager.''' |
|- | |- | ||
Line 156: | Line 156: | ||
|- | |- | ||
| 03:46 | | 03:46 | ||
− | |Type | + | |Type: '''Employee emp1 = new Employee open and close parenthesis semicolon''' |
|- | |- | ||
Line 164: | Line 164: | ||
|- | |- | ||
| 04:03 | | 04:03 | ||
− | |Type | + | |Type: '''emp1.setName("Jayesh");''' '''emp1.setEmail("pqr@gmail.com");''' |
|- | |- | ||
| 04:16 | | 04:16 | ||
− | | In order to print the employee details | + | | In order to print the employee details, type: '''System.out.println("Details of Employee class:" emp1.getDetails()) semicolon''' |
|- | |- | ||
Line 174: | Line 174: | ||
| Let us instantiate '''Manager '''object '''emp2 '''for '''Employee '''class reference i.e. | | Let us instantiate '''Manager '''object '''emp2 '''for '''Employee '''class reference i.e. | ||
− | type '''Employee emp2 = new Manager open and close parenthesis semicolon''' | + | type: '''Employee emp2 = new Manager open and close parenthesis semicolon''' |
|- | |- | ||
| 04:54 | | 04:54 | ||
− | | We are able to do this because any '''Java''' | + | | We are able to do this because any '''Java object''' that pass more than one '''IS-A '''test, is polymorphic. |
|- | |- | ||
| 05:04 | | 05:04 | ||
− | |In | + | |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 | | 05:16 | ||
|A Manager '''IS-A''' Employee | |A Manager '''IS-A''' Employee | ||
+ | |||
A Manager '''IS-A''' Manager | A Manager '''IS-A''' Manager | ||
− | A Manager '''IS-A''' Object | + | |
+ | A Manager '''IS-A''' Object. | ||
|- | |- | ||
Line 201: | Line 203: | ||
| 05:36 | | 05:36 | ||
|Here, we instantiated two '''Manager''' objects: | |Here, we instantiated two '''Manager''' objects: | ||
− | |||
One which references '''Employee '''class. | One which references '''Employee '''class. | ||
And other which references '''Manager '''class. | And other which references '''Manager '''class. | ||
Line 221: | Line 222: | ||
|- | |- | ||
| 06:14 | | 06:14 | ||
− | | We see that there is an error, | + | | We see that there is an error, "The method setDepartment(String) is undefined for the type Employee". |
|- | |- | ||
Line 229: | Line 230: | ||
|- | |- | ||
| 06:30 | | 06:30 | ||
− | | So, remove the line | + | | So, remove the line: '''emp2.setDepartment("IT");''' |
|- | |- | ||
| 06:37 | | 06:37 | ||
− | | In order to print the details, type | + | | In order to print the details, type: '''System.out.println("Details of Manager class:" emp2.getDetails()) semicolon''' |
|- | |- | ||
Line 241: | Line 242: | ||
|- | |- | ||
| 06:58 | | 06:58 | ||
− | | Here in the output | + | | Here in the output, we get the '''Manager of: '''as blank. |
|- | |- | ||
| 07:04 | | 07:04 | ||
− | |This is because we have not initialized '''department''' in '''Manager '''class using '''emp2'''. | + | |This is because, we have not initialized '''department''' in '''Manager '''class using '''emp2'''. |
|- | |- | ||
Line 265: | Line 266: | ||
|- | |- | ||
| 07:34 | | 07:34 | ||
− | |'''Manager''' object referring '''Employee''' class & '''Manager '''object referring '''Manager '''class | + | |'''Manager''' object referring '''Employee''' class & '''Manager '''object referring '''Manager '''class. |
|- | |- | ||
Line 278: | Line 279: | ||
| 07:54 | | 07:54 | ||
| The reason for that is as follows: | | The reason for that is as follows: | ||
− | |||
The compiler sees the '''getDetails()''' method in the '''Employee''' class during '''emp2.getDetails()'''. | The compiler sees the '''getDetails()''' method in the '''Employee''' class during '''emp2.getDetails()'''. | ||
Line 287: | Line 287: | ||
|- | |- | ||
| 08:10 | | 08:10 | ||
− | |At run time, however, the '''JVM''' invokes '''getDetails()''' in the '''Manager''' class as '''getDetails() '''of '''Manager '''class overrides '''getDetails() '''of '''Employee '''class. | + | |At '''run''' time, however, the '''JVM''' invokes '''getDetails()''' in the '''Manager''' class as '''getDetails() '''of '''Manager '''class overrides '''getDetails() '''of '''Employee '''class. |
|- | |- | ||
Line 307: | Line 307: | ||
|- | |- | ||
| 08:57 | | 08:57 | ||
− | |At run time, the '''JVM''' invokes '''getDetails()''' in the '''Employee''' class. So we get the output as per '''getDetails() '''of '''Employee '''class. | + | |At run time, the '''JVM''' invokes '''getDetails()''' in the '''Employee''' class. So, we get the output as per '''getDetails() '''of '''Employee '''class. |
|- | |- | ||
| 09:08 | | 09:08 | ||
− | | Thus the '''JVM''' calls the appropriate method for the object that is referred to in each variable. | + | | Thus the '''JVM''' calls the appropriate method for the '''object''' that is referred to in each variable. |
|- | |- | ||
Line 339: | Line 339: | ||
|- | |- | ||
| 09:47 | | 09:47 | ||
− | |In '''Compile time polymorphism''', class can have more than one method. | + | |In '''Compile time polymorphism''', '''class''' can have more than one '''method'''. |
|- | |- | ||
Line 355: | Line 355: | ||
|- | |- | ||
| 10:11 | | 10:11 | ||
− | | In this tutorial we learnt: | + | | In this tutorial, we learnt: |
+ | * What is '''Polymorphism''' in Java? | ||
− | + | * '''Run-time polymorphism''' | |
− | '''Run-time polymorphism''' | + | |
− | '''Virtual Method Invocation''' and | + | * '''Virtual Method Invocation''' and |
− | '''Compile-time polymorphism''' | + | |
+ | * '''Compile-time polymorphism'''. | ||
|- | |- | ||
| 10:23 | | 10:23 | ||
| As an assignment, | | As an assignment, | ||
− | |||
Override methods for '''Vehicle''' and '''Bike class''' which we used in previous tutorials. | Override methods for '''Vehicle''' and '''Bike class''' which we used in previous tutorials. | ||
Line 374: | Line 375: | ||
|- | |- | ||
| 10:40 | | 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. | + | | 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 | | 10:51 | ||
− | | Spoken Tutorial Project is supported by NMEICT, MHRD, Government of India.More information on this | + | | Spoken Tutorial Project is supported by NMEICT, MHRD, Government of India. More information on this mission is available at this link. |
|- | |- | ||
| 11:03 | | 11:03 | ||
− | | Thats it for the tutorial. This is Trupti Kini from IIT Bombay signing off. Thank you for joining. | + | | Thats it for the tutorial. This is Trupti Kini from '''IIT Bombay''', signing off. Thank you for joining. |
|} | |} |
Revision as of 12:30, 18 May 2017
Time | Narration |
00:01 | Welcome to the spoken-tutorial on Polymorphism in Java. |
00:06 | In this tutorial, we will learn about:
|
00:19 | Here we are using:
|
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:
|
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:
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. |