Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

كلاس Object

جزء من قسم Object Oriented Programming في رحلة Java على Coddy — الدرس 24 من 87.

في لغة Java، ترث كل فئة تنشئها تلقائيًا من فئة خاصة تسمى Object. حتى لو لم تكتب extends في أي مكان، تظل فئتك فئة فرعية من Object. هذا يجعل Object جذر التسلسل الهرمي للفئات بالكامل.

public class Person {
    // هذا يرث بشكل ضمني من Object
}

// يعادل:
public class Person extends Object {
}

بما أن كل فئة (class) ترث من Object، فإن كل كائن في Java لديه وصول إلى عدة طرق (methods) مدمجة. وتشمل الأكثر استخداماً ما يلي:

الطريقة (Method)الغرض
toString()تعيد تمثيلاً نصياً للكائن
equals(Object obj)تقارن بين كائنين للتحقق من التساوي
hashCode()تعيد قيمة رمز التجزئة (hash code) للكائن
getClass()تعيد فئة وقت التشغيل (runtime class) للكائن

بشكل افتراضي، تمتلك هذه الدوال (methods) تنفيذات عامة. على سبيل المثال، تعيد toString() اسم الفئة (class) متبوعاً بـ @ ورمز التجزئة (hash code) الخاص بالكائن بالنظام الست عشري، وهو أمر ليس مفيداً جداً:

Person p = new Person();
System.out.println(p.toString());  // المخرجات: Person@1a2b3c4d

هذا هو السبب في أنك ستقوم غالباً بتجاوز هذه الأساليب في فئاتك الخاصة لتوفير سلوك ذي معنى. إن فهم أن Object هو الأب العام يساعد في تفسير سبب إمكانية تخزين أي كائن في متغير من نوع Object وسبب توفر أساليب معينة في كل كائن تقوم بإنشائه.

challenge icon

التحدي

سهل

دعونا نستكشف كيف تعمل فئة Object كأب عام لجميع فئات Java من خلال بناء نظام جرد بسيط للأجهزة يوضح الأساليب الموروثة من Object.

ستقوم بإنشاء ثلاثة ملفات لتنظيم الكود الخاص بك:

  • Gadget.java: قم بإنشاء فئة تمثل جهازاً إلكترونياً. يجب أن تحتوي فئتك على:
    • حقول خاصة (Private fields) لـ name (String) و year (int)
    • منشئ (Constructor) يقوم بتهيئة كلا الحقلين
    • أساليب جلب (Getter methods) وهي getName() و getYear()
    لا تقم بتجاوز (override) أي أساليب من Object - نريد رؤية السلوك الافتراضي أولاً.
  • Smartphone.java: قم بإنشاء فئة فرعية ترث من Gadget وتضيف ميزات خاصة بالهواتف الذكية:
    • حقل خاص لـ brand (String)
    • منشئ يأخذ name و year و brand - استخدم super(name, year) للجزء الخاص بالأب
    • أسلوب getBrand() الذي يعيد العلامة التجارية
    • تجاوز أسلوب toString() ليعيد: Smartphone: [brand] [name] ([year])
  • Main.java: وضح الفرق بين أساليب Object الافتراضية والمتجاوزة. ستتلقى ثلاثة مدخلات: اسم الجهاز، السنة، والعلامة التجارية. قم بإنشاء كل من Gadget و Smartphone باستخدام نفس الاسم والسنة (بالإضافة إلى العلامة التجارية للهاتف الذكي)، ثم:
    • اطبع اسم فئة الجهاز باستخدام getClass().getSimpleName()
    • اطبع ما إذا كان أسلوب toString() الافتراضي للجهاز يحتوي على رمز "@" (اطبع true أو false)
    • اطبع الهاتف الذكي باستخدام أسلوب toString() المتجاوز الخاص به

ستتلقى ثلاثة مدخلات: اسم الجهاز/الهاتف الذكي (String)، السنة (int)، والعلامة التجارية (String).

يوضح هذا التحدي سبب أهمية تجاوز أساليب Object - حيث يمنحك أسلوب toString() الافتراضي شيئاً مثل Gadget@1a2b3c، بينما توفر نسختك المخصصة معلومات ذات معنى!

جرّب بنفسك

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // قراءة المدخلات
        String name = scanner.nextLine();
        int year = scanner.nextInt();
        scanner.nextLine(); // استهلاك السطر الجديد
        String brand = scanner.nextLine();
        
        // TODO: إنشاء كائن Gadget باستخدام name و year
        
        // TODO: إنشاء كائن Smartphone باستخدام name و year و brand
        
        // TODO: طباعة اسم فئة الـ gadget باستخدام getClass().getSimpleName()
        
        // TODO: طباعة ما إذا كان toString() الخاص بالـ gadget يحتوي على "@" (true أو false)
        
        // TODO: طباعة الـ smartphone (يستخدم toString() التي تم تجاوزها)
        
    }
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Object Oriented Programming