Java أمثلة شاملة حول أماكن وضع الكلمة final في جافا

في المثال التالي قمنا بتعريف 3 متغيرات نوعها final.
الهدف هنا معرفة الطرق المسموح فيها إعطاء قيمة للمتغير المعرف كـ final.

المثال الأول

Example.java
public class Example {
 
    public final int a = 10;   // و أعطيناه قيمة مباشرةً عند تعريفه final هنا قمنا بتعريف متغير نوعه
    public final int b;        // بدون تحديد قيمته final هنا قمنا بتعريف متغير نوعه
    public final int c;        // بدون تحديد قيمته final هنا قمنا بتعريف متغير نوعه
 
    public Example(int b) {
        this.b = b;            // من الكائن, أي أن الكائن هو من سيقوم بتحديدها b هنا سيتم تحديد قيمة المتغير
        c = 50;                // مباشرةً عند إنشاء كائن, أي أن الكائن سيملكها هكذا c هنا سيتم تحديد قيمة المتغير
    }
 
}
		


في المثال التالي سنقوم بإنشاء 2 كلاس, الكلاس A و الكلاس B الذي سيرث منه.
في الكلاس A سنقوم بتعريف دالة عادية و دالة نوعها final.
في الكلاس B سنفعل override للدالة التي ليس نوعها final.
بعدها سنقوم بإنشاء الكلاس Main لتجربة الكود.
الهدف هنا معرفة أن الدوال المعرفة كـ final لا يمكن تعريفها من جديد في الكلاس الذي يرثها. إذاً الكلمة final تمنع الـ override.

المثال الثاني

A.java
public class A {
 
    // final لهذه الدالة لأنها معرفة كـ Override أي كلاس سيرث من هذا الكلاس, لا يمكنه أن يفعل
    public final void firstPrint() {
        System.out.println("welcome to java");
    }
 
    // final لهذه الدالة لأنها غير معرفة كـ Override أي كلاس سيرث من هذا الكلاس, يمكنه أن يفعل
    public void secondPrint() {
        System.out.println("welcome to java");
    }
 
}
		

B.java
// و كأنها موجودة فيه تماماً A إستخدام الأشياء الموجودة في B أي يمكن للكلاس .A يرث من الكلاس B هنا قلنا أن الكلاس
public class B extends A {
 
    // B بالنسبة للكلاس secondPrint هنا قمنا بإعادة كتابة محتوى الدالة
    @Override
    public void secondPrint() {
        System.out.println("class B override my content!");
    }
 
}
		

Main.java
public class Main {
 
    public static void main(String[] args) {
 
        A a = new A();      // a إسمه A هنا قمنا بإنشاء كائن من الكلاس
        B b = new B();      // b إسمه B هنا قمنا بإنشاء كائن من الكلاس
 
        a.firstPrint();     // A هنا سيتم تنفيذ الدالة كما تم تعريفها في الكلاس
        a.secondPrint();    // A هنا سيتم تنفيذ الدالة كما تم تعريفها في الكلاس
 
        b.firstPrint();     // A هنا سيتم تنفيذ الدالة كما تم تعريفها في الكلاس
        b.secondPrint();    // B هنا سيتم تنفيذ الدالة كما تم تعريفها في الكلاس
 
    }
 
}
		

سنحصل على النتيجة التالية عند التشغيل.

welcome to java
welcome to java
welcome to java
class B override my content! 
		


في المثال التالي سنقوم بإنشاء كلاس نوعه final من أجل جعل الكود غير قابل لأي تعديل خارجي.
بعدها سنقوم بإنشاء الكلاس Main لتجربة الكود.
الهدف هنا معرفة أن الكلاس المعرف كـ final يمكن إنشاء كائنات منه, لكن لا يمكن الوراثة منه.

المثال الثالث

FatherOfJava.java
// لمنع الوراثة منه فقط final هنا قمنا بتعريف الكلاس كـ
public final class FatherOfJava {
 
    public String name = "James Arthur Gosling";
    public String born = "May 19, 1955";
 
    public void story() {
        System.out.println(name+ ", born on " +born+ ". He is a Canadian computer scientist,"
                                  + " best known as the father of the Java programming language");
    }
 
}
		

Main.java
public class Main {
 
    public static void main(String[] args) {
 
        // obj إسمه FatherOfJava هنا قمنا بإنشاء كائن من الكلاس
        FatherOfJava obj = new FatherOfJava();
 
        // كما تم تعريفها في الكلاس الأساسي name هنا سيتم عرض قيمة المتغير
        System.out.println("Name of the father of java: " +obj.name);
 
        // FatherOfJava هنا سيتم تنفيذ الدالة كما تم تعريفها في الكلاس
        obj.story();
 
    }
 
}
		

سنحصل على النتيجة التالية عند التشغيل.

Name of the father of java: James Arthur Gosling
James Arthur Gosling, born on May 19, 1955. He is a Canadian computer scientist, best known as the father of the Java programming language 
		

الدورات

أدوات مساعدة

أقسام الموقع

دورات
مقالات كتب مشاريع أسئلة