Javaأمثلة شاملة حول أماكن وضع الكلمة final
في جافا
في المثال التالي قمنا بتعريف 3 متغيرات نوعها final
.
الهدف هنا معرفة الطرق المسموح فيها إعطاء قيمة للمتغير المعرف كـ final
.
المثال الأول
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.
المثال الثاني
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"); } }
// و كأنها موجودة فيه تماماً A إستخدام الأشياء الموجودة في B أي يمكن للكلاس .A يرث من الكلاس B هنا قلنا أن الكلاس public class B extends A { // B بالنسبة للكلاس secondPrint هنا قمنا بإعادة كتابة محتوى الدالة public void secondPrint() { System.out.println("class B override my content!"); } }
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
يمكن إنشاء كائنات منه, لكن لا يمكن الوراثة منه.
المثال الثالث
// لمنع الوراثة منه فقط 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"); } }
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