درود به همه همراهان آی تی پورت. متاسفانه در جلسه پنجم با کمی تاخیر خدمت شما رسیدیم ولی با دستی پرتر و امیدوارم این بخش آموزش جبران دیرکرد ما را بکند. در آموزش های قبلی به مباحث انواع متغییر ها ، انواع عملگر ، ساختارهای کنترلی ، آرایه ها ، برنامه نویسی شی گرایی و در بخش شی گرایی به متدها ، خصوصیات ، Package و Object سازی و متد سازنده شی گرایی پرداختیم. در جلسه پنجم آموزش جاوا در ادامه بحث شی گرایی به مباحث ارثبری و دستور super، سطحهای دسترسی، کلاس انتزاعی و متد انتزاعی، interface، کلاس و متغیر final و در نهایت به متد static می پردازیم. اما بریم برای شروع آموزش.
ارثبری یکی از مفاهیم بنیادی شیگرایی است، آیا تا به حال به فکر پیادهسازی نرمافزاری قدرتمندتر از Winamp افتادهاید؟ این کار بسیار وقت گیر است زیرا شما ابتدا باید برنامهای همانند Winamp را پیادهسازی کنید سپس باید به آن قابلیتهای جدیدی اضافه کنید، اما اگر شما با مفهوم ارثبری آشنا باشید این کار را بسیار سادهتر میتوانید انجام دهید. برای این کار شما میتوانید از کلاس های برنامه Winamp ارث برده و قابلیتهای خود را به Winamp اضافه کنید.(البته به شرطی که Winamp کد باز و با جاوا پیادهسازی شده باشد) ارثبری در زبانهای شیگرا دقیقاً همانند ارثبری در انسان است، یعنی تمام خصوصیات و رفتارهای پدر به فرزند افزوده میشود. مثال :
class Soheil { public void hello() { System.out.print("Salam"); } public void bye() { System.out.print("khoda hafez"); } } class Amir extends Soheil { }
توجه داشته باشید که کلاس Amir دارای ۲ متد byeوhello است دلیل این امر آن است که کلاس امیر از کلاس سهیل ارث برده است برای این کار ما از کلمه extends در کنار کلمه امیر استفاده کردهایم حال یک کلاس را تولید میکنیم تا از امیر شیسازی کند.
class Fact { public static void main(String [] arg) { Amir amir2 = new Amir(); amir2.hello(); //خروجی برابر با سلام است } }
این نکته را به یاد داشته باشید که در ارثبری خصوصیات نیز ارث برده میشوند، نکته دیگری که به آن میتوانیم اشاره کنیم این است که اگر فرزند متد پدر را از قبل دارا باشد دیگر از پدر خود ارث نمیبرد. مثال:
class Soheil { public void hello() { System.out.print("Soheil : Salam"); } public void bye() { System.out.print("Soheil : khoda hafez"); } } class Amir extends Soheil { public void hello() { System.out.print("Amir : Salam !"); } }
حال اگر ما متد Amir.hello() را صدا بزنیم خروجی به شکل ذیل خواهد بود :
Amir : Salam !
اگر در متد سازنده فرزند ما از دستور super() استفاده کنیم متد سازنده پدر کلاس اجرا میشود در بعضی از موارد نیز ما از دستور super برای دسترسی به خود کلاسِ پدر استفاده میکنیم، استفاده از این دستور کاملاً شبیه به دستور this است.
سطحهای دسترسی به شما در پیاده سازی پروژههای کلان کمک میکنند. شاید شما نخواهید تمام متدها و خصوصیات پدر به فرزند منتقل شود !
کلمه public نشان دهنده سطح دسترسی عمومی است این کلمه نشان دهنده این موضوع است که محدودیتی برای آن خصوصیت یا کلاس و یا رفتار در نظر گرفته نشده است. حال بیایید به سایر سطح های دسترسی بپردازیم !
خارج از package | داخل همان package | فرزند | خود کلاس | |
دسترسی دارد | دسترسی دارد | دسترسی دارد | دسترسی دارد | public |
دسترسی ندارد | دسترسی دارد | دسترسی دارد | دسترسی دارد | protected |
دسترسی ندارد | دسترسی ندارد | دسترسی ندارد | دسترسی دارد | private |
حال به مثال زیر توجه کنید:
package tehran; class Amir { private int age; public String address; protected void hello() { System.out.print("Salam"); } }
اگر کلاسی از Amir در همان package ارث برد شرایط زیر حاکم است :
– age را ارث نمیبرد.
– address را ارث میبرد.
– متد hello را ارث میبرد.
اگر کلاس دیگری در داخل package ، تهران بخواهد به امیر دسترسی داشته باشد شرایط زیر حاکم است:
– بهage دسترسی ندارد.
– به address دسترسی دارد.
– به متد hello دسترسی دارد.
اگر کلاس دیگری در خارج از package ، تهران بخواهد به امیر دسترسی داشته باشد شرایط زیر حاکم است:
– بهage دسترسی ندارد.
– به address دسترسی دارد.
– به متدhello دسترسی ندارد.
گاهی اوقات در زمان پیادهسازی کلاسها ما نیاز داریم تا کلاسی تعریف کنیم که سایر کلاسها نتوانند از آن کلاس شیسازی کنند در آن صورت ما از کلمهabstract استفاده میکنیم.
abstract class Amir { public static void main (String [] arg) { System.out.print("This is Main Method"); } }
در این حالت کلاس امیر فقط میتواند یا خود اجرا شود و یا از طریق کلاسی دیگر ارث برده شود. حال اگر متدی بصورت abstract تعریف شود، برای آن متد نمی توان بدنه ای تعریف کرد و این متد باید توسط فرزند پیاده سازی شود. یک نکته مهم در مورد متد های abstract آن است که حتما باید داخل کلاس abstract تعریف شوند.
abstract class Amir { public abstract void hello (); }
interface
نوعی ماهیت همانند کلاس است با این تفاوت که متدهای آن دارای بدنه نیستند، کلاسی که از interface ارث میبرد باید تمامی متدهای آن را به طور کامل پیادهسازی کند، در غیر این صورت جاوا تولید خطا میکند. مثال :
interface Soheil { public void hello(); } class Amir implements Soheil { public void hello() { System.out.print("salam"); } }
نکته: به یاد داشته باشید که برای ارثبری از interface از کلمه implements باید استفاده کنید نه extends !
نکته: نکته جالب دیگری که در interface ها وجود دارد این است که یک کلاس میتواند از چندین interface ارث برد ! مثال :
class Amir implements Soheil , Javad { }
کلاس و متغیر final
کلاسی که به صورت final تعریف شود به سایر کلاسها اجازه ارث بری نمیدهد کلاس final دقیقاً بر عکس کلاسabstract عمل میکند.
final class Amir { public void hello() { System.out.print("Salam"); } }
حال اگر متغیری به صورتfinal تعریف شود جاوا اجازه تغییر مقدار متغیر را به برنامه نویس نمیدهد به این حالت ” متغیر ثابت” گفته میشود.
final int a=2 ;
متدهای static نمیتوانند متدهای غیر static را بصورت مستقیم صدا کنند و حتماً باید در این متدها برای دسترسی به سایر متدهای غیر static از روش Object سازی استفاده کرد.
class Amir { public void hello() { System.out.print("Salam"); } public static void main (String [] arg) { Amir amir2 = new Amir(); amir2.hello(); } }
استثنائات
گاهی اوقات در برنامهنویسی خطاهایی در زمان اجرا رخ میدهد که شما در تولید آن نقش مستقیم نداشته اید. به طور مثال شما قصد خواندن فایلی را در برنامه دارید که آن فایل قبلاً پاک شده است در آن صورت شما با خطای استثنا رو به رو می شوید. زمانی که شما از دستوراتی که احتمال بوجود آوردن خطا را دارند استفاده میکنید جاوا معمولا به شما اجازه نمیدهد که بدون مدیریت خطا آن دستور را بنویسید، برای مدیریت این نوع خطاها میتوانید به ۲ روش عمل کنید :
class amir { public static void main (String [] arg) { try { System.out.print("True"); } catch (Exception e) { System.out.print("Exception !!!!!!!!!!!!"); System.out.print(e); } } }
در این روش شما در قسمت try دستورات اصلی خود را می نویسید، در صورتی که این دستورات باعث ایجاد خطا شود قسمت catch اجرا میشود در این قسمت ابتدا پیغام !!!!!!!!!Exception چاپ میشود سپس در قسمت بعد متغیرe چاپ میشود این متغیر نوع خطا را مشخص میکند، لازم به ذکر است که قسمت catch را میتوانید به دلخواه خود پیادهسازی کنید. در روش دیگر مدیریت خطا وجود ندارد و زمانی که خطایی بوجود میآید فقط پیغام خطا چاپ میشود.
class amir { public static void main (String [] arg) throws Exception { System.out.print("True"); } }
در دنیای بیپایان نرمافزارها و فایلهای دیجیتال، امنیت در دانلود و استفاده از آنها یک…
شرکت ایسوس یکی از پیشتازان در صنعت فناوری اطلاعات و الکترونیک است که در زمینه…
آیا شما هم به دنبال کار با کد های پاورشل برای هک هستید؟ در این…
این روزها که همه افراد به دنبال یک شغل پردرآمد می گردند، مشغول به کار…
خطای page isn’t available right now یکی از آزار دهنده ترین مشکلاتی است که کاربران…
ویندوز پاورشل چیست؟ پاورشل ابزاری قدرتمند به حساب می آید که همه افراد علاقه مند…
View Comments
خیلی ممنون جناب جاهدی
خواهش می کنم :)
سلام وقتتون بخیر ممنون از اطلاعات مفیدتان ممنون میشم در مورد exeption در جاوا بیشتر توضیح بدهید . من هنوز درک درستی ازشون ندارم.
سلام
با سپاس از تهیه ی آموزش.
قصد توهین ندارم ولی بسیار ابتدایی و پیش و پا افتاده (البته به نظر بنده)!
سلام ممنون دوست عزیز :)
بنده هم قصد توهین ندارم ولی همه مثل شما دوران ابتدایی رو پشت سر نذاشتن!
واقعا لایک داری
بووووووووووووووووووووووووس
سلام
عااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااالی بود.
خیلی استفاده کردم.
ممنون
خیلی خوب و مفید بود ساده و روان توضیح دادید خیلی ممنونم
ببین داداش ترکوندی خبر نداری!!!! یه پی دی اف بساز منتشر کن که جامعه ایران و فارسی زبان به نظرم به فهمیدن این مفاهیم به زبان خودشون خیلی نیاز دارن و منبع کاملی ندارن که به این شکل راحت و روان همه مسایل تخصصی رو تزریق کنه!!!
fadatttttttttttttttttttttttttttttttttttt
عالی بود..
با سلام
واقعا کارتون عالیه
خیلی روان و گیرا
سلام، ببخشید میشه توضیح بدین که متغیر استاتیک کاربردش چیه؟ در خصوص متد استاتیک نوشتید ولی متغیر استاتیک نگفتید