Saturday, 18 February 2017

Non Access Modifier


Bu gün non access modifierlərdən final-a baxacağıq.
Siniflər,metodlar,dəyişənlər final elan edilə bilərlər.


Final siniflər.

Final elan edilən siniflərdən alt siniflər yarada bilmərik.
Cəhd etdikdə aşağadakı xətanı alacağıq.
cannot inherit from final A.
package com.mehman.nonaccessmodifier;
/**
 *
 * @author bashirovm
 */
public final class A {
    
}

package com.mehman.nonaccessmodifier;

/**
 *
 * @author bashirovm
 */
public class B extends A{
   
}

Final metodlar.

Final elan edilən metodları alt siniflərdə override(əzmək) edə bilmirik.
Xəta alırıq.
method() in B cannot override method() in A  overridden method is final
package com.mehman.nonaccessmodifier;
/**
 *
 * @author bashirovm
 */
public class A {
 
    public final void method(){}
}

package com.mehman.nonaccessmodifier;
/**
*
* @author bashirovm
*/
public class B extends A{

@Override
public void method() {

}
}


Final dəyişənlər.

Final elan edilən dəyişənlərin dəyərini ya elan edilən zaman yada constructorda vermək məcburiyyətindəyik.
Final dəyişənlərə bir dəfə dəyər mənimsətdiksə tutduğları dəyərləri bir daha dəyişə bilmərik.
package com.mehman.nonaccessmodifier;
/**
 *
 * @author bashirovm
 */
public class A {
 
    private final int a;

}

Qeyd etdiyimiz nümunədə final dəyişən elan edilib ancaq heç bir dəyər mənimsədilməyib.
Bu halda xəta alacağıq.
'variable a not initialized in the default constructor'.
Dəyişəni elan etdikdə və constructorda final dəyişənlərə mənimsətmə necə olur ona baxaq.
package com.mehman.nonaccessmodifier;
/**
 *
 * @author bashirovm
 */
public class A {
 
    private final int a;
    private final int b = 2;

    public A() {
        a = 1;
    }    
 
}

Metod parameterlərində göndərilən dəyərlərin dəyişdirilməməsi üçün də final-dan istifadə edirik.
package com.mehman.nonaccessmodifier;
/**
 *
 * @author bashirovm
 */
public class A {
   
    public void method(final int a) {
        a = a*2;//final parameter a may not be assigned
    }    
 
}

Constantlar.

Bir öncəki yazıda non access modifierlərdən static haqqında yazmışdım.
Static və final birlikdə işlədilərək constantlar yaradılır.

package com.mehman.nonaccessmodifier;
/**
 *
 * @author bashirovm
 */
public class A {
   
    public final static String SECRET_KEY="a564sas45dsds6";
}