مقاله بررسی وراثت در زبان جاوا
Loading...
وراثت در جاوا

وراثت برای اشتراک گذاری مثال هایی از متغیر ها و متد های یک کلاس با کلاس های دیگر به کار میرود که به معنای ارث رسیدن ویژگی ها و رفتار های یک کلاس به کلاس های دیگر میباشد. در بسیاری از مواقع تعدادی از اشیا ممکن است که مشخصات مشترکی داشته باشند.پیش از این مقاله ما وراثت را در سی شارپ نیز برسی کردیم.

به عنوان مثال ماشین A مشخصاتش را (شماره ثبت , سرعت کنونی , تعداد دنده و تعداد سیلندر) با ماشین B و ماشین C به اشتراک میگذارد. و هردو ماشین B و C چند ویژگی بیشتری دارند : ماشین B دوربین عقب و ماشین C چراغ های مه شکن جلو دارد. این ویژگی های بیشتر باع ث میشود مه ماشین های A و B و C با یکدیگر متفاوت باشند. در این زمینه ماشین A تبدیل به کلاس ارشد ماشین های B و میشود و ماشین های B و C زیر مجموعه های ماشین A می باشند.

وراثت در برنامه نویسی جاوا یک کلاس میتواند یک کلاس ارشد مستقیم و هر کلاس ارشد میتواند بی نهایت زیر مجموعه داشته باشد. هر زیر مجموعه یک نسخه ی به خصوصی از کلاس ارشدش میباشد.
هرگاه تعریف یک کلاس با کلاس دیگری یکپارچه باشد وراثت به میان می آید; برای انجام این کار در جاوا شما نیاز به استفاده از کلمات کلیدی گسترش دارید. به عنوان مثال :
کد

public class Inheritance {

    public static void main(String[] args) {
        Math2 obj = new Math2();
        obj.Add(10, 20);
        obj.Subtract(80, 70);
    }
}

class Math1 {

    int result;

    public void Add(int a, int b) { // Add two integers
        result = a + b;
        System.out.println(result);
    }
} 
 class Math2 extends Math1 {

    public void Subtract(int a, int b) { //Subtract a small integer from big one
        if (a >= b) {
            result= a - b;
        } else {
            result= b - a;
        }
        System.out.println(result);
    }
}

خروجی

۳۰

۱۰

در مثال بالا Math2 , Math1 را گسترش میدهد. از این رو متغیر های نتیجه در Math2 استفاده میشوند بدون آنکه در آن تعریف شده باشند و متد Add() در Math1 برای فرخوانی اشیای کلاس Math2 استفاده میشود. این اتفاق می افتد زیرا تعریف Math1 با Math2 با استفاده از کلمات کلیدی گسترش یکپارچه میشوند.

انواع وراثت

سطح انفرادی

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

وراثت چندین سطحی

وراثت

میتواند ‘n’ تعداد سطح در وراثت چند سطحی وجود داشته باشد. از این رو کلاس پایین ترین سطح تعریف کننده ی تمام کلاس های بالایش است. برنامه ی نوشته شده ی زیر نشان دهنده ی یک وراثت چند سطحی میباشد.

کد

public class MultilevelInheritance 

    public static void main(String[] args) {
        C obj = new C();
        obj.method1();
        obj.method2();
        obj.method3();
    }
}

class A {
    public void method1() {
        System.out.println("You are in method1");
    }
}

class B extends A {
    public void method2() {
        System.out.println("You are in method2");
    }
}

class C extends B {

    public void method3() {
        System.out.println("You are in method3");
    }
}

خروجی

You are in method1

You are in method2

You are in method3

سلسله مراتبی

هنگامی که تعداد دو یا بیشتری کلاس از کلاس ارشد مشتق شوند , وراثت سلسله مراتبی نامیده میشود.

وراثت

کد

public class HierarchicalInheritance {

    public static void main(String[] args) {
        B obj = new B();
        obj.method1();
        obj.method2();

        C obj1 = new C();
        obj1.method1();
        obj1.method3();
    }
}

class A {

    public void method1() {
        System.out.println("You are in method1");
    }
}

class B extends A {

    public void method2() {
        System.out.println("You are in method2");
    }
}

class C extends A {

    public void method3() {
        System.out.println("You are in method3");
    }
}

خروجی

You are in method1
You are in method2
You are in method1
You are in method3

چندگانه (توسط جاوا پشتیبانی نمیشود)

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

وراثت

یادداشت: وراثت چندگانه به صورت نیمه با استفاده از رابط کاربری بدست می آید.

رابط کاربری

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

کد

interface Intr {

    public void IntrMethod();

    public void IntrMethod1();
}

interface Intr1 {

    public void Intr1Method();
}

interface Intr2 {

    public void Intr2Method();
}

public class Interface {

    public static void main(String[] args) {
        A obj = new A();
        obj.IntrMethod();
        obj.IntrMethod1();
        obj.Intr1Method();
        obj.Intr2Method();
    }
}

class A implements Intr, Intr1, Intr2 {

    public void IntrMethod() {
        System.out.println("IntrMethod");
    } 

    public void IntrMethod1() {
        System.out.println("IntrMethod1");
    }

     public void Intr1Method() {
        System.out.println("Intr1Method");
    }

     public void Intr2Method() {
        System.out.println("Intr2Method");
    }
}

خروجی

IntrMethod
IntrMethod1
Intr1Method
Intr2Method

چگونه مشخصه ی دسترسی بر وراثت تاثیر میگذارد

در جاوا ۴ مشخصه ی دسترسی وجود دارد.

Public : هرگاه یکی از اعضای کلاس مشخصه ی public تعریف شود, میتواند توسط هر کدی به آن دسترسی پیدا کرد.

Protected: protected تنها مورد مناسب برای استفاده در وراثت است. هرگاه یکی از اعضای کلاس protected تعریف شود تنها میتوان توسط همان کلاس یا کلاس های زیر مجموعه به آن دسترسی پیدا کرد.

Private : اعضای کلاسی که توسط مشخصه ی private تعریف شوند تنها میتوانند توسط همان کلاس مورد دسترسی قرار گیرند.

Default : زمانی که شما مشخصه ی دسترسی خاصی برای اعضا تعریف نمیکنید , جاوا به طور اتوماتیک مشخصه ی default را برمیگزیند. و اعضایی که توسط default تعریف شده اند میتوانند توسط هر کد دیگری در بسته مورد دسترسی باشند. اما نمیتوانند خارج از بسته مورد دسترسی قرار گیرند.

محدود کردن وراثت

امیدوارم شما آموخته باشید که چگونه انواع مختلف وراثت را در جاوا اجرا کنید. حال اگر بخواهید که هیچ کلاس دیگری امکان گسترش کلاس موردنظرتان را نداشته باشد باید چه کنید , که به معنای محدود کردن وراثت میباشد.

تنها کافیست که از کلمه ی کلیدی “final” مانند زیر استفاده نمایید:

final class myclass{
// Insert code here
}

حال “myclass” توسط هیچ کلاس دیگری قابل گسترش نیست.



avatar داریوش فرخی

داریوش فرخی هستم از سال 92 شروع به یادگیری برنامه نویسی و از سال 93 در بخش برنامه نویسی و تولید محتوای سایت mspsoft.com مشغول هستم. فعالیتم نیز بیشتر در زمینه های برنامه نویسی با سی شارپ و asp.net بوده است. اوقات فراغتم را هم غالبا با تماشای فیلم یا بازی های کامپیوتری پر میکنم .

آخرین مطالب و تخفیفات در کانال تلگرام :) کانال تلگرام ام اس پی سافت
مطالب مرتبط
ديدگاه خود را ارسال کنيد


محبوب ترين ويدئو هاي انلاين
دوره برنامه نویسی فروشگاه اینترنتی
  • تعداد اعضا 80k
  • قيمت دوره۱۰۰,۰۰۰ تومان
  • امتيازدهي
    1 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 5( 5٫00 از 1 رای )
    Loading...
دوره آموزشی سیستم ثبت سفارش آنلاین
  • تعداد اعضا 80k
  • قيمت دوره۵۰,۰۰۰ تومان
  • امتيازدهي
    1 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 5( 5٫00 از 1 رای )
    Loading...
دوره طراحی سیستم مدیریت مشتریان
  • تعداد اعضا 80k
  • قيمت دوره۵۰,۰۰۰ تومان
  • امتيازدهي
    1 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 5( 5٫00 از 1 رای )
    Loading...