Difference between revisions of "Java/C3/Polymorphism/English-timed"

From Script | Spoken-Tutorial
Jump to: navigation, search
 
(One intermediate revision by one other user not shown)
Line 12: Line 12:
 
| In this tutorial, we will learn about:
 
| In this tutorial, we will learn about:
 
   
 
   
* '''Polymorphism''' in Java
+
'''Polymorphism''' in Java
  
* '''Run-time polymorphism'''
+
'''Run-time polymorphism'''
  
* '''Virtual Method Invocation''' and
+
'''Virtual Method Invocation''' and
  
* '''Compile-time polymorphism'''.
+
'''Compile-time polymorphism'''.
  
 
|-
 
|-
Line 24: Line 24:
 
| Here we are using:
 
| Here we are using:
 
   
 
   
* '''Ubuntu Linux Version 12.04'''
+
'''Ubuntu Linux Version 12.04'''
  
* '''JDK Version 1.7''' and
+
'''JDK Version 1.7''' and
  
* '''Eclipse 4.3.1'''  
+
'''Eclipse 4.3.1'''  
  
 
|-
 
|-
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, '''Employee emp1 = new Employee open and close parenthesis semicolon'''
+
|Type: '''Employee emp1 = new Employee open and close parenthesis semicolon'''
  
 
|-
 
|-
Line 164: Line 164:
 
|-
 
|-
 
| 04:03
 
| 04:03
|Type, '''emp1.setName("Jayesh");''' '''emp1.setEmail("pqr@gmail.com");'''
+
|Type: '''emp1.setName("Jayesh");''' '''emp1.setEmail("pqr@gmail.com");'''
  
 
|-
 
|-
 
| 04:16
 
| 04:16
| In order to print the employee details type, '''System.out.println("Details of Employee class:"  emp1.getDetails()) semicolon'''
+
| 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''' object that pass more than one '''IS-A '''test, is polymorphic.
+
| 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 '''Java''', all objects are polymorphic, since any object will pass the '''IS-A '''test for their own type and for the class Object.
+
|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, '''The method setDepartment(String) is undefined for the type Employee'''
+
| 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, '''emp2.setDepartment("IT");'''
+
| So, remove the line: '''emp2.setDepartment("IT");'''
  
 
|-
 
|-
 
| 06:37
 
| 06:37
| In order to print the  details, type, '''System.out.println("Details of Manager class:"  emp2.getDetails()) semicolon'''
+
| 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. We get the '''Manager of: '''as blank.
+
| 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?
  
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 374:
 
|-
 
|-
 
| 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 Mission is available at this link.
+
| 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.
  
 
|}
 
|}

Latest revision as of 13:01, 8 December 2017

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.

Contributors and Content Editors

PoojaMoolya, Pratik kamble, Sandhya.np14