OCA Java imtahan mövzuları

Interface Variables

Interface dəyişənləri üçün aşağıdakı 2 qayda mövcuddur:

  1. Interface dəyişənlərinin public, staticfinal olduğu fərz edilməlidir, aşkar qeyd olunmasa belə. Ona görə də bu dəyişənləri private, protected və ya abstract elan etmək istəsək compile xətası alarıq.
  1. Interface dəyişənləri final olduğuna görə onların dəyəri elan edilən zaman mənimsədilməlidir.

Bu qaydalara əsasən interface dəyişənlərinə constant dəyişənlər kimi də baxmaq olar.

Aşağıdakı kod nümunələri bir-birilə ilə ekvivalentdir. 1-ci nümunəki kod compiler tərəfindən 2-ci nümunədəki koda çevrilir:

public interface CanSwim {     // example-1
    int MAXIMUM_DEPTH = 100;
    final static boolean UNDERWATER = true;
    public static final String TYPE = "Submersible";
}
public interface CanSwim {     // example-2
    public static final int MAXIMUM_DEPTH = 100;
    public static final boolean UNDERWATER = true;
    public static final String TYPE = "Submersible";
}

Aşağıdakı kod nümunələri isə compile olunmur:

public interface CanDig {
    private int MAXIMUM_DEPTH = 100;                 // DOES NOT COMPILE
    protected abstract boolean UNDERWATER = false;   // DOES NOT COMPILE
    public static String TYPE;                       // DOES NOT COMPILE
}

Öncəki mövzulardan birində qeyd etmişdik ki, fərqli interface`lərdə eyni abstract metod olarsa və onlar hər hansı bir class tərəfindən eyni anda implements edilərsə, class bu metodlardan birini override etdikdə, avtomatik olaraq ikinci metod da override olunmuş hesab edilir. Bəs fərqli interface`lərdə eyni adlı dəyişənlər olarsa və onlar hər hansı bir class tərəfindən eyni anda implements edilərsə, onda nə baş verəcək? Axı dəyişənlər override edilmir?!

Deməli, compiler implements zamanı fərqli interface`lərdə eyni adlı dəyişənlər aşkarladıqda heç bir problem olmadan kodu compile edir, amma həmin dəyişəni çağırarkən onun qarşısında interface`in adı aşkar şəkildə qeyd edilməlidir, əks halda compiler dəyişənin hansı interface`ə aid olduğunu təyin edə bilmir və xəta verir:

interface First {
    String s = "first";
    void test();
}

interface Second {
    String s = "second";
    void test();
}

class Row implements First, Second {

    public void test() {
        System.out.println("test");
    }
    
    public static void main(String[] args) {
        Row r = new Row();
        r.test();
        System.out.println(r.s); //DOES NOT COMPILE, reference to s is ambiguous
        System.out.println(((First)r).s);   // first
        System.out.println(((Second)r).s);  // second
    }
}

 

[topics lang=az]

About the author

Mushfiq Mammadov

Leave a Comment


The reCAPTCHA verification period has expired. Please reload the page.

 

This site uses Akismet to reduce spam. Learn how your comment data is processed.