جاوا
جلسه ۳۵: تفاوت overload و override کردن متدها در جاوا

در این جلسه، با تفاوت بین overload
و override
متدها آشنا خواهید شد. موارد زیر را بیان خواهیم کرد:
Overloading
وOverriding
متدها- مثالی برای
overload
متد - مثالی برای
override
متد
Overloading
و Overriding
متدها
Overloading
و Overriding
متدها دو مفهوم کاملاً متفاوت هستند.
تفاوت ها را در جدول زیر مقایسه می کنیم:
Method Overloading | Method Overriding |
---|---|
اورلود در زمان کامپایل رخ می دهد | اورراید در زمان اجرا رخ می دهد |
عملکرد بهتری دارد زیرا اتصال در زمان کامپایل انجام می شود | عملکرد ضعیف تری دارد زیرا اتصال در زمان اجرا انجام می شود |
متدهای خصوصی و نهایی می توانند اورلود شوند | متدهای خصوصی و نهایی را نمی توان اورراید کرد |
در صورت اورلود کردن مقدار بازگشتی متد مهم نیست | در صورت اورراید کردن ، نوع بازگشتی متد باید یکسان باشد |
برای اورلود کردن باید آرگمان ها متفاوت باشند | در صورت اورراید کردن باید آرگمان ها یکسان باشند |
اورلود در یک کلاس انجام می شود | کلاس پایه و کلاس مشتق شده برای اورراید کردن لازمند |
معمولاً برای افزایش خوانایی کد استفاده می شود | معمولاً برای پیاده سازی متدی استفاده می شود که در کلاس والد قبلاً پیاده سازی شده است |
مثالی برای overload
متد
در ادامه کلاس ماشین حساب را در جاوا پیاده سازی می کنیم:
//Calculator Class
class Calculator {
// Add funtions with two parameters
int add(int num1, int num2) {
return num1 + num2;
}
// Add funtions with three parameters
int add(int num1, int num2, int num3 ) {
return num1 + num2 + num3;
}
// Add funtions with four parameters
int add(int num1, int num2, int num3, int num4 ) {
return num1 + num2 + num3 + num4;
}
public static void main(String args[]) {
Calculator cal = new Calculator();
System.out.println("10 + 20 = " + cal.add(10, 20));
System.out.println("10 + 20 + 30 = " + cal.add(10, 20, 30));
System.out.println("10 + 20 + 30 + 40 = " + cal.add(10, 20, 30, 40));
}
}
در اینجا ما ۳ نسخه مختلف از تابع ()add
داریم. تابع ()add
در اینجا overload
شده است.
مثالی برای override
متد
در اینجا کلاس Shape
را در جاوا پیاده سازی می کنیم:
// Shape Class
class Shape {
public double getArea() {
return 0;
}
}
// A Rectangle is a Shape
class Rectangle extends Shape { // extended form the Shape class
private double length;
private double width;
public Rectangle(double length, double width) {
this.length = length;
this.width = width;
}
public double getArea() {
return this.width * this.length;
}
}
// A Circle is a Shape
class Circle extends Shape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
public double getArea() {
return 3.13 * this.radius * this.radius;
}
public static void main(String args[]) {
Shape[] shape = new Shape[2]; // Creating the shape array of size 2
shape[0] = new Circle(3); // creating the circle object at index 0
shape[1] = new Rectangle(2, 3); // creating the rectangle object at index 1
System.out.println("Area of Circle: " + shape[0].getArea());
System.out.println("Area of Rectangle: " + shape[1].getArea());
}
}
ما یک کلاس پایه به نام Shape
و دو کلاس مشتق شده با نام های Rectangle
و Circle
داریم. در اینجا ، متد ()getArea
از کلاس Shape
در کلاس Rectangle
و Circle
اورراید شده است. ما تفاوت های بین overload
و override
متدها را یاد گرفتیم. در درس بعدی ، نگاهی خواهیم داشت به چند ریختی پویا.