Constructor

Constructor

Constructor is a special type of method that is used to initialize the state of an object. Constructor is invoked at the time of object creation. It constructs the values i.e. data for the object that is why it is known as constructor.
Constructor is just like method but it does not have any explicit return type.

Rules for creating constructor
There are basically two rules defined for the constructor.
      1. Constructor name must be same as its class name
      2. Constructor must have no explicit return type

Types of constructors
  There are two types of constructors:
       1. default constructor (no-arg constructor)
       2. parameterized constructor



1) Default Constructor
              A constructor that have no parameter is known as default constructor.

Syntax of default constructor:
<class_name>(){}

Example of default constructorIn this example, we are creating the no-arg constructor in the Bike class. It will be invoked at the time of
object creation.
 
//example of default constructor
class Bike{
Bike(){System.out.println("Bike is created");}
public static void main(String args[]){
Bike b=new Bike();
}
}
Output:Bike is created


Rule: If there is no constructor in a class, compiler automatically creates a default
constructor.


 
Que)What is the purpose of default constructor?Default constructor provides the default values to the object.
Example of default constructor that displays the default values
//example of default values provided by constructor
class Student{
int id;
String name;
void display(){System.out.println(id+" "+name);}
public static void main(String args[]){
Student s1=new Student();
Student s2=new Student();
s1.display();
s2.display();
}
}

Output:0 null
0 null


Explanation:In the above class,you are not creating any constructor so compiler provides you a
default constructor.Here 0 and null values are provided by default constructor.





Parameterized constructorA constructor that have parameter is known as parameterized constructor.

Why use parameterized constructor?Parameterized constructor is used to provide different values to the distinct objects.
 
Example of parameterized constructorIn this example, we have created the constructor of Student class that have two parameters. We can have any number of parameters in the constructor.

class Student{
int id;
String name;
Student(int i,String n){
id = i;
name = n;
}
void display(){System.out.println(id+" "+name);}
public static void main(String args[]){
Student s1 = new Student(111,"Karan");
Student s2 = new Student(222,"Aryan");
s1.display();
s2.display();
}
}
Output:111 Karan
222 Aryan


Constructor OverloadingConstructor overloading is a technique in Java in which a class can have any number of constructors that
differ in parameter lists.The compiler differentiates these constructors by taking into account the number of
parameters in the list and their type.
Example of Constructor Overloading
//Program of constructor overloading
class Student{
int id;
String name;
int age;
Student(int i,String n){
id = i;
name = n;
}
Student(int i,String n,int a){
id = i;
name = n;
age=a;
}
void display(){System.out.println(id+" "+name+" "+age);}
public static void main(String args[]){
Student s1 = new Student(111,"Karan");
Student s2 = new Student(222,"Aryan",25);
s1.display();
s2.display();
}
}
Output:111 Karan 0
222 Aryan 25

What is the difference between constructor and method ?There are many differences between constructors and methods. They are given below.


Constructor
  • Constructor is used to initialize the state of an object.
  • Constructor must not have return type.
  • Constructor is invoked implicitly.
  • The java compiler provides a default constructor if you don't have any constructor. 
  • Constructor name must be same as the class name.
Method
  • Method is used to expose behaviour of an object.Method must have return type.
  • Method is invoked explicitly.
  • Method is not provided by compiler in any case. 
  • Method name may or may not be same as class name.
Que)Does constructor return any value?Ans:yes,that is current class instance (You cannot use return type yet it returns a value).


Copying the values of one object to another like copy constructor in C++There are many ways to copy the values of one object into another. They are:
By constructor
By assigning the values of one object into another
By clone() method of Object class
In this example, we are going to copy the values of one object into another using constructor.
 
//Program of Copying the values of one object to anotherclass Student{
int id;
String name;
Student(int i,String n){
id = i;
name = n;
}
Student(Student s){
id = s.id;
name =s.name;
}
void display(){System.out.println(id+" "+name);}
public static void main(String args[]){
Student s1 = new Student(111,"Karan");
Student s2 = new Student(s1);
s1.display();
s2.display();
}
}
Output:111 Karan
111 Karan




Copying the values of one object to another without constructorWe can copy the values of one object into another by assigning the objects values to another object. In this
case, there is no need to create the constructor.
 
//Anoter program of Copying the values of one object to anotherclass Student{
int id;
String name;
Student(int i,String n){
id = i;
name = n;
}
void display(){System.out.println(id+" "+name+" "+age);}
public static void main(String args[]){
Student s1 = new Student(111,"Karan");
Student s2 = new Student();
s2.id=s1.id;
s2.name=s1.name;
s1.display();
s2.display();
}
}
Output:111 Karan
111 Karan


Can constructor perform other tasks instead of initialization?Yes, like object creation, starting a thread, calling method etc. You can perform any operation in the
constructor as you perform in the method.

Method Overloading in Java

Method Overloading in Java

If a class have multiple methods by same name but different parameters, it is known as Method Overloading.

If we have to perform only one operation, having the same name of the methods increases the readabilityof the program. Suppose you have to perform addition of the given numbers but there can be any number of arguments, if you write the method such as a(int,int) for two parameters, and b(int,int,int) for three parameters then it may be difficult for you as well as other programmers to understand the behaviour of the method because its name differs. So, we perform method overloading to figure out the program quickly.


Advantage of method overloading?

Method overloading increases the readability of the program.

Different ways to overload the method:
There are two ways to overload the method in java

1. By changing number of arguments
2. By changing the data type

Note: In java, Methood Overloading is not possible by changing return type of the method.
1)Example of Method Overloading by changing the no. of arguments
In this example, we have created two overloaded methods, first sum method performs addition of two
numbers and second sum method performs addition of three numbers.
//Program of method overloading by chainging no. of arguments

class Calculation{
void sum(int a,int b){System.out.println(a+b);}
void sum(int a,int b,int c){System.out.println(a+b+c);}
public static void main(String args[]){
Calculation obj=new Calculation();
obj.sum(10,10,10);
obj.sum(20,20);
}
}
Output:30
40
2

2)Example of Method Overloading by changing data type of argument
In this example, we have created two overloaded methods that differs in data type. The first sum method
receives two integer arguments and second sum method receives two double arguments.
//Program of method overloading by chainging data type of argument

class Calculation{
void sum(int a,int b){System.out.println(a+b);}
void sum(double a,double b){System.out.println(a+b);}
public static void main(String args[]){
Calculation obj=new Calculation();
obj.sum(10.5,10.5);
obj.sum(20,20);
}
}

Output:21.0
40


Que) Why Method Overloaing is not possible by changing the return type of method?
In java, method overloading is not possible by changing the return type of the method because there may
occur ambiguity. Let's see how ambiguity may occur:
because there was problem:

class Calculation{
int sum(int a,int b){System.out.println(a+b);}
double sum(int a,int b){System.out.println(a+b);}
public static void main(String args[]){
Calculation obj=new Calculation();
int result=obj.sum(20,20); //Compile Time Error
}
}

int result=obj.sum(20,20); //Here how can java determine which sum() method should be called
 
Can we overload main() method?
Yes, by method overloading. You can have any number of main methods in a class by method overloading.
Let's see the simple example:
//Program of overloading main() method

class Simple{
public static void main(int a){
System.out.println(a);
}
public static void main(String args[]){
System.out.println("main() method invoked");
main(10);
}
}

Output:main() method invoked
10

Method Overloading and TypePromotion
One type is promoted to another implicitly if no matching datatype is found. Let's understand the concept by
the figure given below:



As displayed in the above diagram, byte can be promoted to short, int, long, float or double. The short
datatype can be promoted to int,long,float or double. The char datatype can be promoted to int,long,float or
double and so on.

Example of Method Overloading with TypePromotion
//Program of method overloading with TypePromotion
class Calculation{
void sum(int a,long b){System.out.println(a+b);}
void sum(int a,int b,int c){System.out.println(a+b+c);}
public static void main(String args[]){
Calculation obj=new Calculation();
obj.sum(20,20);//now second int literal will be promoted to long
obj.sum(20,20,20);
}
}
Output:40
60

Example of Method Overloading with TypePromotion if matching found
If there are matching type arguments in the method, type promotion is not performed.
//Program of method overloading with TypePromotion if matching found

class Calculation{
void sum(int a,int b){System.out.println("int arg method invoked");}
void sum(long a,long b){System.out.println("long arg method invoked");}
public static void main(String args[]){
Calculation obj=new Calculation();
obj.sum(20,20);//now int arg sum() method gets invoked
}
}
Output:int arg method invoked

Example of Method Overloading with TypePromotion in case ambiguity
If there are no matching type arguments in the method, and each method promotes similar number of
arguments, there will be ambiguity.


//Program of method overloading with TypePromotion in case ambiguity

class Calculation{
void sum(int a,long b){System.out.println("a method invoked");}
void sum(long a,int b){System.out.println("b method invoked");}
public static void main(String args[]){
Calculation obj=new Calculation();
obj.sum(20,20);//now ambiguity
}
}

Output:Compile Time Error