OCA Java imtahan mövzuları

Applying Access Modifiers

Kimlər üçün əlçatandır:

  • private – ancaq eyni class daxilində.
  • default (package private) accessprivate + eyni paketdəki digər classlar
  • protecteddefault access + subclasslar
  • publicprotected + digər paketlərdəki classlar.

Cədvəl şəklinə salsaq daha aydın görsənəcək:

Access Modifier class daxilində paket
daxilində
Digər paketlərdən ancaq subclass ilə digər
paketlərdən
private bəli xeyr xeyr xeyr
default bəli bəli xeyr xeyr
protected bəli bəli bəli xeyr
public bəli bəli bəli bəli

private, default və public açar sözlərinin istifadəsi protected`ə nisbətən daha sadədir. Əvvəlcə bu modifier`lər ilə bağlı nümunələrə baxaq, sonra protected`ə ayrıca baxarıq:

package az.mm.A;

public class AccessModifiers {

    private String secretText;
    String friendlyText;
    public String forEveryOneText;

    public void displaySecretText() {
        System.out.println(secretText);     // it is ok
    }
}

class Test {

    public static void main(String[] args) {
        AccessModifiers am = new AccessModifiers();
        System.out.println(am.forEveryOneText);
        System.out.println(am.friendlyText);
        System.out.println(am.secretText);     // DOES NOT COMPILE
    }
}
package az.mm.B;

import az.mm.A.*;

public class Other {

    public void display() {
        AccessModifiers am = new AccessModifiers();
        System.out.println(am.forEveryOneText);      // it is ok
        System.out.println(am.friendlyText);         // DOES NOT COMPILE
        System.out.println(am.secretText);           // DOES NOT COMPILE
    }
}

 

protected ilə bağlı vəziyyət daha mürəkkəbdir. Nümunələrə baxaq:

access-modifier-example

package az.mm.main;

public class Bank {
    protected String text = "This is not public information";
    protected void display(){
        System.out.println(text);
    }
}
package az.mm.main;

import az.mm.banks.IBAR;

public class MainService {

    public String getInformation() {
        IBAR ibar = new IBAR();
        return ibar.text;
    }

    public void showInformation() {
        Bank bank = new Bank();
        bank.display();
    }
}
package az.mm.banks;

import az.mm.main.Bank;

public class IBAR extends Bank {

    public void method1() {
        System.out.println(text);
        display();
    }

    public void method2() {
        IBAR ibar = new IBAR();
        System.out.println(ibar.text);
        ibar.display();
    }

    public void method3() {
        Bank bank = new Bank();
        System.out.println(bank.text);  // DOES NOT COMPILE
        bank.display();                 // DOES NOT COMPILE
    }

    public void method4() {
        Bank ibar = new IBAR();
        System.out.println(ibar.text);  // DOES NOT COMPILE
        ibar.display();                 // DOES NOT COMPILE
    }
}
package az.mm.banks;

public class BankService {
    public String getInformation(){
        IBAR ibar = new IBAR();
        return ibar.text;  // DOES NOT COMPILE
    }
}
package az.mm.other;

import az.mm.banks.IBAR;

public class OtherService {
    public String getInformation(){
        IBAR ibar = new IBAR();
        return ibar.text;    // DOES NOT COMPILE
    }
}

MainService classında gördüyünüz kimi eyni paketdəki digər class daxilində çağırıldıqda problem yoxdur. Amma fərqli paketdən ancaq subclass vasitəsi ilə çağırıla bilər, bu səbəbdən IBAR classında method1()method2() xəta vermir. Amma subclassda Bank classının öz referansı vasitəsi ilə protected üzvlərə müraciət edilə bilməz, buna görə də method3()method4() xəta verir. Bu nüans ilə bağlı Chapter 5`də varislik mövzusunda ayrıca təkrar baxacağıq. Amma subclassın referansı vasitəsilə fərqli paketdən çağırıldıqda yenə xəta verir (BankService və ya OtherService classlarında göstərildiyi kimi), subclassın referansı vasitəsi ilə ancaq subclassın öz daxilindən çağırmaq mümkündür.

 

[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.