شما می توانید با عضویت در انجمن پرسش و پاسخ درسمن هرگونه سوالی دارید را مطرح کنید


شی گرایی در زبان جاوا (چند ریختی یا پلی مورفیسم Polymorphism)


شی گرایی در زبان جاوا (چند ریختی یا پلی مورفیسم Polymorphism)
برای دانلود و دیدن آنلاین این درس نیاز است وارد سایت شوید. در صورت نداشتن حساب کاربری عضو شوید.

چند ریختی در کلاس ها
اگر در یک برنامه ای یک کلاس داشته باشیم که از کلاس دیگری ارث برده باشد و فرزند کلاس والدش باشد، اگر در کلاس والد متدی را استفاده کرده باشیم و همان متد را در کلاس فرزند تعریف کرده باشیم، عمل چند ریختی اتفاق می افتاد که باید آن را کنترل کنیم تا ارزشی به ما بدهد.
برای درک بهتر در محیط کد نویسی توضیح میدهیم:
اول یک کلاس اصلی تعریف میکنیم سپس یک کلاس با نام ParentClass تعریف میکنیم.

 

package package1;		

public class MainClass {

	public static void main(String[] args) {
	

	}

}
package package1;		

public class ParentClass {
	int Num1;
	int Num2;
	public ParentClass(int num1,int num2) {
		Num1=num1;
		Num2=num2;
	}
	void Print() {
		System.out.println("Num1 is :"+Num1+"\tNum2 is :"+Num2);
	}

}


حالا اگر از کلاس ParentClass یک شی تعریف کنیم و به آن مقدار بدهیم و با استفاده از تابع Print دستور چاپ بدهیم و سپس برنامه را اجرا کنیم خواهیم دید که مقادیر داده شده را چاپ می کند.
 

package package1;		

public class MainClass {

	public static void main(String[] args) {
		ParentClass p1=new ParentClass(10, 20);
		p1.Print();

	}

}


تا به اینجا مشکلی وجود نداشت؛ حالا یک کلاس دیگر که فرزند کلاس ParentClass می باشد تعریف میکنیم و نام آن را ChildClass میگذاریم، و برای این کلاس یک عضو داده ای و یک سازنده تعریف میکنیم. همانطور که در جلسه قبل گفتیم سازنده کلاس فرزند باید سازنده کلاس والد را تامین کند:
 

package package1; 			

public class ChildClass extends ParentClass {
	String Name;
	public ChildClass(String name,int num1,int num2) {
		super(num1,num2);
		Name=name;
	}

}
package package1;		

public class MainClass {

	public static void main(String[] args) {
		ParentClass p1=new ParentClass(10, 20);
		p1.Print();
		ChildClass c1=new ChildClass("Mehdi", 50, 100);
	}

}


مطالبی که تا الان گفتیم خلاصه ای از مباحث جلسه قبل بود.
اگر یک تابع که در کلاس والد وجود دارد، در کلاس فرزند نیز تعریف شود، این تابع دوباره نویسی شده است و اولویت با کلاس فرزند می باشد.

 

package package1; 			

public class ChildClass extends ParentClass {
	String Name;
	public ChildClass(String name,int num1,int num2) {
		super(num1,num2);
		Name=name;
	}
//	void Print()
//	{
//		System.out.println("Name is :"+Name);
//	}
}
package package1;		

public class ParentClass {
	int Num1;
	int Num2;
	public ParentClass(int num1,int num2) {
		Num1=num1;
		Num2=num2;
	}
	void Print() {
		System.out.println("Num1 is :"+Num1+"\tNum2 is :"+Num2);
	}

}
package package1;		

public class MainClass {

	public static void main(String[] args) {
		ParentClass p1=new ParentClass(10, 20);
		p1.Print();
		ChildClass c1=new ChildClass("Mehdi", 50, 100);
		c1.Print();
	}

}


تا قبل از این که کلاس فرزند تابع Print داشته باشد، اگر برنامه را اجرا کنیم تابع Print کلاس والدش اجرا خواهد شد.
اما از لحظه ای که داخل کلاس فرزند تابع Print را تعریف کردیم، در لحظه فراخوانی تابع Print کلاس فرزند اجرا می شود؛ بنابراین اگر ما هر تعدادی کلاس فرزند داشته باشیم که هر کدام از آنها برای خود تابع Print مجزا داشته باشند، در هنگام اجرا اولویت با تابع Print کلاس فرزند می باشد.

 

package package1; 			

public class ChildClass extends ParentClass {
	String Name;
	public ChildClass(String name,int num1,int num2) {
		super(num1,num2);
		Name=name;
	}
	void Print()
	{
		System.out.println("Name is :"+Name);
	}
}


حال اگر نیاز داشته باشیم که علاوه بر تابع Print کلاس فرزند، تابع Print کلاس والدش را هم فراخوانی کنیم، می‌توانیم در همان تابع Print کلاس فرزند بگوییم بعد از این که name  را چاپ کردی، با کلمه کلیدی super برو سراغ کلاس والد؛ برای درک بهتر به کد زیر توجه کنید.
 

package package1; 			

public class ChildClass extends ParentClass {
	String Name;
	public ChildClass(String name,int num1,int num2) {
		super(num1,num2);
		Name=name;
	}
	void Print()
	{
		System.out.println("Name is :"+Name);
		super.Print();
	}
}


کلمه کلیدی final
این کلمه کلیدی بارها و بارها در منابع جاوا استفاده شده است و شما هم می‌توانید از این کلمه استفاده کنید؛ final در لغت به معنی نهایی کردن می باشد .
اگر ما یک فیلد را از هر کلاسی تعریف کرده باشیم و قبل از آن کلمه final را قرار بدهیم، یعنی اینکه مقدار این فیلد از این لحظه به بعد تغییری نکند و ما هم از این لحظه به بعد اجازه نداریم مقدار این فیلد را تغییر بدهیم.

package package1;		
public class MainClass {
	public static void main(String[] args) {
		final int x=100;
	}
}


final این قابلیت را دارد که در سطح یک متد تعریف شود.

مثلا ما در کلاس والد یک تابع تعریف میکنیم:

package package1;   	
public class ParentClass {
	int Sum(int x,int y) {
		return x+y;
	}
}

حالا میرویم و در کلاس فرزند نیز یک تابع همنام تعریف میکنیم:

package package1;			
public class ChildClass extends ParentClass {
	int Sum(int x, int y) {
		int s=x+y;
		System.out.println("Sum Is :"+s);
		return s;
	}
	
}

اگر یک متد را final کنیم، یعنی در لحظه تعریف متد کلمه final را قبل از آن بنویسیم در واقع داریم این تابع را اجبار میکنیم که در اینجا نهایی شود؛ یعنی ما اجازه overwrite کردن این تابع را در سطح کلاس فرزند نمیدهیم.

package package1;   	
public class ParentClass {
	final int Sum(int x,int y) {
		return x+y;
	}
}

هر جا نیاز باشد تا دیگر از عملیات ارث بری اجرا نشود کافی است از کلمه final استفاده شود.

در حالت سوم ما میتوانیم حتی کلاس ها را نیز final کنیم؛ اگر کلاسی final شد، دیگر اجازه ارث بری را از آن گرفته ایم یعنی دیگر هیچ کلاسی از آن نمیتواند ارث ببرد.

اگر در سطح یک کلاس، یک فیلد را final کنیم، یا باید همان لحظه به آن مقدار بدهیم و یا اگر به آن مقدار ندادیم فقط اجازه داریم در متد سازنده به آن مقدار بدهیم.


نظر بدهید

نشانی ایمیل شما منتشر نخواهد شد .
برای ارسال نظر نیاز است وارد سایت شوید. در صورت نداشتن حساب کاربری عضو شوید.
26 جلسه برای دوره رایگان آموزش جاوا - مقدماتی تا متوسط

درس 1
مقدمه ای بر زبان برنامه نویسی جاوا
28 دقیقه / رایگان

درس 2
نصب و راه اندازی و ایجاد اولین برنامه در eclipse
30 دقیقه / رایگان

درس 3
ساختار کلی برنامه در زبان جاوا
17 دقیقه / رایگان

درس 4
ساختار کلی برنامه در زبان جاوا (بخش دوم)
18 دقیقه / رایگان

درس 5
عملگر ها در زبان جاوا
49 دقیقه / رایگان

درس 6
چاپ اطلاعات در خروجی در زبان جاوا
30 دقیقه / رایگان

درس 7
دریافت داده از ورودی (کاربر) در زبان جاوا
29 دقیقه / رایگان

درس 8
تولید داده تصادفی و آشنایی با کلاس Random در زبان جاوا
19 دقیقه / رایگان

درس 9
دستورات کنترل اجرای برنامه (if, if-else) در زبان جاوا
23 دقیقه / رایگان

درس 10
دستور کنترلی switch-case در زبان جاوا
21 دقیقه / رایگان

درس 11
حلقه تکرار for در زبان جاوا
22 دقیقه / رایگان

درس 12
دستورات While و Do-While در زبان جاوا
27 دقیقه / رایگان

درس 13
شی گرایی در زبان جاوا (مفاهیم پایه)
33 دقیقه / رایگان

درس 14
شی گرایی در زبان جاوا (سطوح دسترسی به اعضای کلاس)
30 دقیقه / رایگان

درس 15
شی گرایی در زبان جاوا (Getter-setter)
40 دقیقه / رایگان

درس 16
شی گرایی در زبان جاوا (متدهای سازنده و اعضای استاتیک)
29 دقیقه / رایگان

درس 17
شی گرایی در زبان جاوا (وراثت)
25 دقیقه / رایگان

درس 18
شی گرایی در زبان جاوا (چند ریختی یا پلی مورفیسم Polymorphism)
29 دقیقه / رایگان

درس 19
شی گرایی در زبان جاوا (کلاس abstract )
25 دقیقه / رایگان

درس 20
شی گرایی در زبان جاوا (interface)
21 دقیقه / رایگان

درس 21
آرایه های یک بعدی در زبان جاوا
40 دقیقه / رایگان

درس 22
آرایه های دو بعدی و لیست ها در زبان جاوا
34 دقیقه / رایگان

درس 23
HashMap و Enum ها در زبان جاوا
28 دقیقه / رایگان

درس 24
آموزش رشته ها در جاوا
38 دقیقه / رایگان

درس 25
کنترل خطا و استثنا ها در جاوا
30 دقیقه / رایگان

درس 26
برخورد با استثناها در جاوا
27 دقیقه / رایگان

دوره رایگان آموزش جاوا - مقدماتی تا متوسط


تعداد جلسات 26 جلسه
مدت زمان 685 دقیقه
سطح مهارت مقدماتی
زبان فارسی
دانشجو 203 دانشجو
گواهی نامه ندارد
قیمت دوره : 0 تومان
رایگان
مهدی عباسی
مهدی عباسی

درباره مدرس :

مدیر‌ عامل‌ شرکت آریا‌ نرم‌‌ افزار دارنده مدرک کارشناسی‌ ارشد مهندسی کامپیوتر 12‌ سال سابقه تدریس دروس کامپیوتر را در دانشگاههای دولتی، آزاد، پیام‌نور ملایر، شهیدشمسی‌پور تهران و تدریس برنامه‌نویسی در انیستیتو ایزایران، مجتمع فنی و موسسه راه‌آینده تهران دارا میباشد و تا به حال راهنمایی انجمنهای علمی دانشگاه و صدها پروژه دانشجویی را برعهده داشته است. تخصص اصلی: با داشتن گواهی‌نامه‌های معتبر تدریس از انیستیتو‌ ایزایران، راه آینده‌تهران و سازمان‌فنی‌حرفه‌ای، تدریس و آموزش‌ دروس کامپیوتر، ‌برنامه‌نویسی کامپیوتر و کلاسهای کنکور کارشناسی و کارشناسی‌ارشد میباشد.همچنین تجربه داوری و نظارت مسابقات برنامه‌نویسی کشوری‌ACM را در سالهای متعدد داشته و تیم مورد رهبری ایشان در 3سال متوالی مقام اول مسابقات کشوری را از آن خود کرده است.ایشان مقالاتی در زمینه شبکه‌های کامپیوتری، تکنیک‌های وزارت دفاع و ... به ثبت رسانده و مشاور و کارشناس در طراحی و برنامه نویسی بیش از 50‌برنامه کاربردی تحت وب و ویندوز و موبایل میباشد. افتخارات دیگر:کسب مقام دوم ایده‌های برتر در مسابقات استارت‌آپ و بکند کشوری را نام برد.