النتائج 1 إلى 1 من 1
الموضوع:

الدرس 7 الوراثة في جافا

الزوار من محركات البحث: 520 المشاهدات : 2412 الردود: 0
جميع روابطنا، مشاركاتنا، صورنا متاحة للزوار دون الحاجة إلى التسجيل ، الابلاغ عن انتهاك - Report a violation
  1. #1
    من المشرفين القدامى
    تاريخ التسجيل: July-2012
    الدولة: بغدادية الهوى
    الجنس: أنثى
    المشاركات: 2,734 المواضيع: 229
    صوتيات: 57 سوالف عراقية: 2
    التقييم: 3920
    أكلتي المفضلة: قورمة سبزي
    مقالات المدونة: 25

    الدرس 7 الوراثة في جافا

    الوراثة في جافا هي العلاقة بين الفئة المتفوقة و الفئة الفرعية التابعة لها. هذا يعني أنه يمكن استخدام كائن من الفئة فرعية "subclass" مثلما تستخدم اي كائن من الطبقة المتفوقة "superclass". آلية توريث الفئة في جافا تستخدم لبناء فئات جديدة من الفئات الموجودة. العلاقة الوراثية هي إنتقالية : إذا كانت الفئة x تمتد من الفئة y، فإن الفئة z الممتدة من الفئة x سوف ترث أيضا من الفئة y.


    على سبيل المثال يمكن لفئة سيارة "car" ان ترث بعض الخصائص من الفئة العامة لوسيلة نقل "vehicle". هنا نجد أن الفئة الأساسية هي الفئة وسيلة نقل "vehicle" و الفئة الفرعية هي سيارة "car" التي هي أكثر تحديدا. يجب على الفئة الفرعية استخدام المصطلح "extends" للإشتقاق من الفئة فائقة التي يجب أن يكون مكتوب في الرأسية الخاصة بتعريف الفئة الفرعية. ترث الفئة فرعية أعضاء من الفئة المتفوقة و هذا يعزز بالتالي إعادة استخدام التعليمات البرمجية. ويمكن للفئة الفرعية نفسها إضافة خصائص و تصرفات خاص بها. الفئة java.lang.Object دائما تكون في أعلى هرم الميراث لأي فئة .


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    class Box {



    double width;

    double height;

    double depth;

    Box() {

    }

    Box(double w, double h, double d) {

    width = w;

    height = h;

    depth = d;

    }

    void getVolume() {

    System.out.println("Volume is : " + width * height * depth);

    }

    }



    public class MatchBox extends Box {



    double weight;

    MatchBox() {

    }

    MatchBox(double w, double h, double d, double m) {

    super(w, h, d);





    weight = m;

    }

    public static void main(String args[]) {

    MatchBox mb1 = new MatchBox(10, 10, 10, 10);

    mb1.getVolume();

    System.out.println("width of MatchBox 1 is " + mb1.width);

    System.out.println("height of MatchBox 1 is " + mb1.height);

    System.out.println("depth of MatchBox 1 is " + mb1.depth);

    System.out.println("weight of MatchBox 1 is " + mb1.weight);

    }

    }


    Output

    Volume is : 1000.0

    width of MatchBox 1 is 10.0
    height of MatchBox 1 is 10.0
    depth of MatchBox 1 is 10.0
    weight of MatchBox 1 is 10.0
    ما هو الغير ممكن عند استخدام توريث الفئة لجافا؟


    1. الأعضاء الخاصين "Private members" للطبقة المتفوقة ليسوا قابلين للتوريث من قبل الفئة الفرعية، و لا يمكن الوصول إليهم إلا بشكل غير مباشر.

    2. الأعضاء الذين لهم إمكانية الوصول الافتراضي في الفئة المتفوقة هم أيضا ليسوا قابلين للتوريث من قبل الفئات الفرعية لواجهات اخرى ، وهؤلاء الأعضاء لا يمكن الوصول إليهم إلا بأسمائهم البسيطة في الفئات الفرعية ضمن نفس الواجهة و نفس الفئة المتفوقة.

    3. بما ان المنشؤون "constructors" وكتل المهيئ "initializer blocks" ليسوا أعضاء في الفئة ، فهم غير قابلين للتوريث من قبل الفئة الفرعية.

    4. فئة فرعية يمكنها فقط تمديد فئة فائقة واحدة

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    class Vehicle {



    // Instance fields

    int noOfTyres; // no of tyres

    private boolean accessories; // check if accessorees present or not

    protected String brand; // Brand of the car

    // Static fields

    private static int counter; // No of Vehicle objects created

    // Constructor

    Vehicle() {

    System.out.println("Constructor of the Super class called");

    noOfTyres = 5;

    accessories = true;

    brand = "X";

    counter++;

    }

    // Instance methods

    public void switchOn() {

    accessories = true;

    }

    public void switchOff() {

    accessories = false;

    }

    public boolean isPresent() {

    return accessories;

    }

    private void getBrand() {

    System.out.println("Vehicle Brand: " + brand);

    }

    // Static methods

    public static void getNoOfVehicles() {

    System.out.println("Number of Vehicles: " + counter);

    }

    }



    class Car extends Vehicle {



    private int carNo = 10;

    public void printCarInfo() {

    System.out.println("Car number: " + carNo);

    System.out.println("No of Tyres: " + noOfTyres); // Inherited.

    // System.out.println("accessories: " + accessories); // Not Inherited.

    System.out.println("accessories: " + isPresent()); // Inherited.

    // System.out.println("Brand: " + getBrand()); // Not Inherited.

    System.out.println("Brand: " + brand); // Inherited.

    // System.out.println("Counter: " + counter); // Not Inherited.

    getNoOfVehicles(); // Inherited.

    }

    }



    public class VehicleDetails { // (3)



    public static void main(String[] args) {

    new Car().printCarInfo();

    }

    }


    Output

    Constructor of the Super class called

    Car number: 10
    No of Tyres: 5
    accessories: true
    Brand: X
    Number of Vehicles: 1
    الكلمات "this" و "super"


    هاذين الكلمتين الأساسيتين ، "this" و "super" سيقومان بمساعدتك في اسم الحقل أو اسم المنهج الذي تريده. وباستخدام "this" و "super" لديك السيطرة الكاملة على امكانية استدعاء الحقل أو المنهج الموجود في نفس الفئة أو لإستدعائه من الفئة المتفوقة مباشرتا. يتم استخدام الكلمة "this" كمرجع للكائن الحالي الذي هو مثيل للفئة الحالية. و تستخدم الكلمة "super" أيضا كمراجع للكائن الحالي، ولكن كما مثيل للفئة الفائقة للفئة الحالية.


    المرجع "this" للكائن الحالي هو مفيد في الحالات التي يكون فيها المتغير المحلي أخفى أو ظلل حقل بنفس الاسم. إذا كان المنهج يحتاج إلى تمرير الكائن الحالي إلى منهج آخر ، يمكن له أن يفعل ذلك باستخدام هذا المرجع. ملاحظة أن المرجع "this" لا يمكن أن يكون قد تم استخدامه في سياق ثابت ، كما لم يتم تنفيذ التعليمات البرمجية ثابتة في سياق أي كائن.


    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    class Counter {



    int i = 0;

    Counter increment() {

    i++;

    return this;

    }

    void print() {

    System.out.println("i = " + i);

    }

    }



    public class CounterDemo extends Counter {



    public static void main(String[] args) {

    Counter x = new Counter();

    x.increment().increment().increment().print();

    }

    }



    Output

    Volume is : 1000.0

    width of MatchBox 1 is 10.0
    height of MatchBox 1 is 10.0
    depth of MatchBox 1 is 10.0
    weight of MatchBox 1 is 10.0


تم تطوير موقع درر العراق بواسطة Samer

قوانين المنتديات العامة

Google+

متصفح Chrome هو الأفضل لتصفح الانترنت في الجوال