Junior
რა არის ხილვადობა Java-ის პროგრამირების კონტექსტში?
sobes.tech AI
პასუხი AI-სგან
Java կոնտեքստում տեսանելիությունը (նույնպես կոչվում է տեսանելիության տարածք) որոշում է, թե որքանով է հասանելի փոփոխականը, մեթոդը, կոնստրուկտորը կամ դասը ծրագրի այլ մասերից: Այն վերահսկվում է մոդիֆիկատորներով:
Java-ում կա չորս տեսանելիության մակարդակ:
public: հասանելի է ցանկացած վայրից ներսում և դուրս՝ պակետից:protected: հասանելի է նույն պակետում և ենթակլասներում (նույնիսկ այլ պակետներում):- Դիֆոլտ ռեժիմ (default կամ package-private): հասանելի է միայն նույն պակետում: Մոդիֆիկատորը բացահայտորեն նշված չէ:
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
}
}
```}}}}}