Sobes.tech
Junior

რა არის ხილვადობა Java-ის პროგრამირების კონტექსტში?

sobes.tech AI

პასუხი AI-სგან

Java կոնտեքստում տեսանելիությունը (նույնպես կոչվում է տեսանելիության տարածք) որոշում է, թե որքանով է հասանելի փոփոխականը, մեթոդը, կոնստրուկտորը կամ դասը ծրագրի այլ մասերից: Այն վերահսկվում է մոդիֆիկատորներով:

Java-ում կա չորս տեսանելիության մակարդակ:

  1. public: հասանելի է ցանկացած վայրից ներսում և դուրս՝ պակետից:
  2. protected: հասանելի է նույն պակետում և ենթակլասներում (նույնիսկ այլ պակետներում):
  3. Դիֆոլտ ռեժիմ (default կամ package-private): հասանելի է միայն նույն պակետում: Մոդիֆիկատորը բացահայտորեն նշված չէ:
  4. private: հասանելի է միայն նույն դասում:
Մոդիֆիկատոր Դաս Պակետ Ենթակլաս (պակետից դուրս) Յուրաքանչյուր դաս (պակետից դուրս)
public Այո Այո Այո Այո
protected Այո Այո Այո Ոչ
Default Այո Այո Ոչ Ոչ
private Այո Ոչ Ոչ Ոչ

Հասկանալ տեսանելիությունը օգնում է ստեղծել ավելի հուսալի և մոդուլային կոդ, սահմանափակելով ցանկալի չլինող մուտքը դասերի ներքին տարրերին:

Օրինակ modifkator-ների օգտագործումը:

// com.example.package1 պակետում ClassA դասը
package com.example.package1;

public class ClassA {
    public int publicVar;
    protected int protectedVar;
    int defaultVar; // Դիֆոլտ մոդիֆիկատոր
    private int privateVar;

    public void publicMethod() {
        // Կարող է մուտք գործել բոլոր փոփոխականներին
        System.out.println("ClassA-ի հանրային մեթոդ");
    }

    protected void protectedMethod() {
        System.out.println("ClassA-ի պաշտպանված մեթոդ");
    }

    void defaultMethod() {
        System.out.println("ClassA-ի դիֆոլտ մեթոդ");
    }

    private void privateMethod() {
        System.out.println("ClassA-ի մասնավոր մեթոդ");
    }

    public void accessMembers() {
        publicVar = 1;
        protectedVar = 2;
        defaultVar = 3;
        privateVar = 4; // ՕԿ, դասի ներսում հասանելի
        privateMethod(); // ՕԿ, դասի ներսում հասանելի
    }
}
// ClassB նույն պակետում com.example.package1
package com.example.package1;

public class ClassB {
    public void accessClassAMembers(ClassA objA) {
        objA.publicVar = 10; // ՕԿ, public
        objA.protectedVar = 20; // ՕԿ, protected (նույն պակետ)
        objA.defaultVar = 30; // ՕԿ, default (նույն պակետ)
        // objA.privateVar = 40; // Կոմպիլյացիայի սխալ, private
        objA.publicMethod(); // ՕԿ, public
        objA.protectedMethod(); // ՕԿ, protected (նույն պակետ)
        objA.defaultMethod(); // ՕԿ, default (նույն պակետ)
        // objA.privateMethod(); // Կոմպիլյացիայի սխալ, private
    }
}
// ClassC այլ պակետում com.example.package2
package com.example.package2;
import com.example.package1.ClassA;

public class ClassC extends ClassA { // ClassC-ն ենթակլաս է ClassA-ի
    public void accessClassAMembersFromSubclass() {
        publicVar = 100; // ՕԿ, public
        protectedVar = 200; // ՕԿ, protected (սուբքլաս, նույնիսկ այլ պակետում)
        // defaultVar = 300; // Կոմպիլյացիայի սխալ, default (այլ պակետ)
        // privateVar = 400; // Կոմպիլյացիայի սխալ, private

        publicMethod(); // ՕԿ, public
        protectedMethod(); // ՕԿ, protected (սուբքլաս, նույնիսկ այլ պակետում)
        // defaultMethod(); // Կոմպիլյացիայի սխալ, default (այլ պակետ)
        // privateMethod(); // Կոմպիլյացիայի սխալ, private
    }
}
// ClassD այլ պակետում com.example.package2
package com.example.package2;
import com.example.package1.ClassA;

public class ClassD {
    public void accessClassAMembers(ClassA objA) {
        objA.publicVar = 1000; // ՕԿ, public
        // objA.protectedVar = 2000; // Կոմպիլյացիայի սխալ, protected (այլ պակետ, ոչ սուբքլաս)
        // objA.defaultVar = 3000; // Կոմպիլյացիայի սխալ, default (այլ պակետ)
        // objA.privateVar = 4000; // Կոմպիլյացիայի սխալ, private

        objA.publicMethod(); // ՕԿ, public
        // objA.protectedMethod(); // Կոմպիլյացիայի սխալ, protected (այլ պակետ, ոչ սուբքլաս)
        // objA.defaultMethod(); // Կոմպիլյացիայի սխալ, default (այլ պակետ)
        // objA.privateMethod(); // Կոմպիլյացիայի սխալ, private
    }
}
```}}}}}