Java. Overloading of methods in classes. Overloading of constructors
Contents
- 1. What does the overloading of methods mean in the Java programming language? Example
- 2. Example of a class containing overloaded methods
- 3. On what grounds the parameters of overloaded methods differ from each other?
- 4. How many methods can be overloaded in a class?
- 5. How many overloaded implementations can a method have in the class?
- 6. How is implemented the constructor overloading in the class? Example
- 7. Is it possible to declare two methods in a class that have the same signatures of input parameters, but which return different types of values? Example
- Related topics
Search other websites:
1. What does the overloading of methods mean in the Java programming language? Example
The term “overload” means the use of the same method name several times when it is declared in the class. From the point of view of the syntax of a language, there can not be two identical names in a certain local space. However, it is allowed to declare methods (functions) with the same name but different parameters. If an overloaded method is called, then from several declared methods, the compiler automatically determines the desired method by its parameters, which are specified at the call.
Overloading of methods is an effective mechanism for implementing polymorphism in classes.
In general, the declaration of a class containing an overloaded method might look like this:
class CMyClass { // ... OverloadedMethod(parameters1) { // ... } OverloadedMethod(parameters2) { // ... } // ... OverloadedMethod(parametersN) { // ... } }
where
- CMyClass – class name;
- OverloadedMethod1() – the name of overloaded method;
- parameters1, parameters2, …, parametersN – Parameters (parameter list) of any of the overloaded methods. Parameters (parameter list) of any of the overloaded methods. These parameters must be different each other types or quantities.
2. Example of a class containing overloaded methods
In the example, the Complex class is declared that implements a complex number consisting of the real and imaginary parts. The class implements:
- internal variables of real type with names a, b. These variables correspond to the real and imaginary parts of the number: z = a + bi;
- constructor of class Complex() without parameters;
- access methods GetA(), GetB(), SetComplex();
- the overloaded method Mult(), which implements various variants of multiplying the complex number implemented in the class.
The text of class declaration
public class Complex { // hidden data of class private double a; // real part private double b; // imaginary part // class constructor Complex() { a = 1; b = 1; } // access methods double GetA() { return a; } double GetB() { return b; } void SetComplex(double a, double b) { this.a = a; this.b = b; } // Overloaded method Mult() // without parameters - squaring Complex Mult() { Complex c = new Complex(); double A, B; A = a*a - b*b; B = a*b + b*a; c.SetComplex(A, B); return c; } // method Mult() with 1 parameter - multiplication of a complex number by an ordinary number Complex Mult(double d) { Complex c = new Complex(); double A, B; A = a*d; B = b*d; c.SetComplex(A, B); return c; } // method Mult() with 2 parameters - multiplication of complex numbers Complex Mult(double a2, double b2) { Complex c = new Complex(); double A, B; A = a*a2 - b*b2; B = a*b2 + b*a2; c.SetComplex(A, B); return c; } }
Using the class in another method
... Complex c1 = new Complex(); double A, B; c1.SetComplex(2.0, 3.0); // use of the overloaded Mult() method Complex c2 = c1.Mult(); // squaring A = c2.GetA(); // A = -5.0 B = c2.GetB(); // B = 12.0 c2 = c1.Mult(4); // multiplication by a number A = c2.GetA(); // A = 8.0 B = c2.GetB(); // B = 12.0 c2 = c1.Mult(1, 3); // multiplication by a complex number A = c2.GetA(); // A = -7.0 B = c2.GetB(); // B = 9.0 ...
3. On what grounds the parameters of overloaded methods differ from each other?
If the method name is overloaded in the class, the parameters of this method may differ:
- number of parameters;
- types of parameters that the method receives.
4. How many methods can be overloaded in a class?
Any number of methods can be overloaded in a class.
5. How many overloaded implementations can a method have in the class?
In a class, an overloaded method can have any number of implementations. The main thing is that the parameters list of each overloaded method were unique.
6. How is implemented the constructor overloading in the class?
Overloading of constructors is implemented in the same way as overloading of conventional methods. Overloading the constructors allows you to set various ways to initialize the objects of the class.
Below is the class Circle that implements the circle. The class defines the following variables and methods:
- hidden (private) variables x, y, r, defining the coordinates of the center of the circle and its radius;
- four overloaded constructors;
- methods for accessing to the external variables of class GetCircle(), GetX(), GetY(), GetR(), SetXYR();
- the GetSquare() method that returns the area of a circle.
The program code of the class is the following
public class Circle { // class realizing a circle on the coordinate plane private int x, y; // the coordinates of the circle center private int r; // radius of circle // overloaded constructors // the constructor without parameters Circle() { x = y = 0; r = 1; } // constructor with 1 parameter Circle(int r) { this.r = r; } // constructor with 2 parameters Circle(int x, int y) { this.x = x; this.y = y; r = 1; } // constructor with 3 parameters Circle(int x, int y, int r) { this.x = x; this.y = y; this.r = r; } // access methods // returns a Circle object Circle GetCircle() { // create a new object of type Circle, be sure to allocate memory for it Circle c = new Circle(x, y, r); return c; // return the object } // return the coordinates and the radius int GetX() { return x; } int GetY() { return y; } int GetR() { return r; } // set a new values of x, y, r int SetXYR(int nx, int ny, int nr) { x = nx; y = ny; r = nr; } // a method that calculates the area of a circle double GetSquare() { return (double)(3.1415*r*r); } }
Using a class in another program code
// use of the Circle class in another program code Circle c0 = new Circle(); // call the constructor without parameters Circle c1 = new Circle(5); // call the constructor with 1 parameters Circle c2 = new Circle(20, 15); // call the constructor with 2 parameters Circle c3 = new Circle(10, 8, 5); // call the constructor with 3 parameters int d; // test d = c0.GetR(); // d = 1 d = c1.GetX(); // d = 0 d = c2.GetY(); // d = 15 d = c3.GetR(); // d = 5 double s = c3.GetSquare(); // s = 62.830000000000005
The above code overloads 4 constructors:
// constructor without parameters Circle() { // ... } // constructor with 1 parameter Circle(int r) { // ... } // constructor with 2 parameters Circle(int x, int y) { // ... } // constructor with 3 parameters Circle(int x, int y, int r) { // ... }
These constructors differ in a number of parameters.
7. Is it possible to declare two methods in a class that have the same signatures of input parameters, but which return different types of values?
Yes, it is. The following example demonstrates the use of an overloaded Get() method that does not receive parameters, but returns different types of values (int, double).
The class Demo is declared, which implements:
- internal variable d;
- an overloaded Get() method without parameters, which returns different types of values.
Class text:
public class Demo { private int d; // class constructor Demo() { d = 0; } // access methods int GetD() { return d; } double GetD() { return (double)d; } void SetD(int nd) { d = nd; } }
Demonstration of using the Get() method of the Demo class in another program code
Demo d1 = new Demo(); int t; double x; d1.SetD(8); t = d1.Get(); // t = 8 - will be called: int Get() x = d1.Get(); // x = 8.0 - will be called: double Get()
Related topics
- 1. The use of classes in Java programs. Class and object definition. Examples
- 2. Constructors. Parameterized constructors. The keyword ‘this’. Garbage collection. The finalize() method. Examples