کلاس final و متد final

کلاس final (کلاس نهایی)، کلاسی است که دیگر کلاس ها نمی توانند از آن ارث بری کنند و چون قابلیت ارث بری ندارد نمی تواند مجرد (abstract) هم باشد. مثال زیر یک کلاس final را نشان می دهد :

final class Base
{
   private int someField;

   public void SomeMethod()
   {
      //Do something here
   }

   //Constructor
   public Base()
   {
      //Do something here
   }
}

class Derived extends Base
{
   //This class cannot inherit the Base class
}

برای تعریف این کلاس ها از کلمه کلیدی final استفاده می شود. مشاهده می کنید که کلاس نهایی مانند کلاس های عادی، دارای فیلد، خواص، و متد می باشند. کلاس مشتق (Derived) در مثال بالا با خط قرمز نشان داده شده است چون نمی تواند از کلاس نهایی (Base) ارث بری کند. وقتی یک کلاس را نهایی می کنیم، تمام متدهای آن نیز نهایی می شوند. استفاده از این کلاسها همانطور که ذکر شد زمانی مفید است که بخواهید کلاسی ایجاد کنید که دیگر کلاسها نتوانند از آن ارث بری کنند.

متد Final

متد final به متدی گفته می شود که هیچ زیر کلاسی نتواند آن را بازنویسی یا Override کند. به مثال زیر توجه کنید :

package program;

class Parent
{
    final void ShowMessage()
    {
        System.out.println("This is a final method!");        
    }
}

class Child extends Parent
{
    @Override
    void ShowMessage()
    {
        System.out.println("This is a final method that Overriden!");        
    } 
}

public class Program 
{    
    public static void main(String[] args) 
    {

    }  
}

اگر به کدهای بالا توجه کنید و آن را در محیط NetBeans بنویسید مشاهده می کنید که در خط قرمز بالا خطا به وجود می آید. چون کلاس Child از کلاس Parent ارث بری کرده است و زیر کلاس محسوب می شود و طبق تعریف هیچ زیر کلاسی نمی تواند متدهای final را بازنویسی کند.