Sobes.tech
Junior

Kas yra matomumas Java programavimo kontekste?

sobes.tech AI

Atsakymas iš AI

Java kontekste matomumas (taip pat vadinamas matomumo sritimi) nustato, kaip prieinama kintamoji, metodas, konstruktorius ar klasė iš kitų programos dalių. Ji kontroliuojama prieigos modifikatoriais.

Java yra keturi matomumo lygiai:

  1. public: prieinama iš bet kurios vietos viduje ir už paketą.
  2. protected: prieinama to paties paketo ir potėvėse (net ir kituose paketuose).
  3. Numatytasis režimas (default arba package-private): prieinama tik to paties paketo viduje. Modifikatorius aiškiai nenurodytas.
  4. private: prieinama tik to paties klaso viduje.
Modifikatorius Klasė Paketas Potėvė (iš kito paketo) Bet kuris klasė (iš kito paketo)
public Taip Taip Taip Taip
protected Taip Taip Taip Ne
Default Taip Taip Ne Ne
private Taip Ne Ne Ne

Supratimas apie matomumą padeda kurti patikimesnį ir moduliniį kodą, apribojant nepageidaujamą prieigą prie klasių vidinių elementų.

Pavyzdys naudojant modifikatorius:

// com.example.package1 pakete ClassA klasė
package com.example.package1;

public class ClassA {
    public int publicVar;
    protected int protectedVar;
    int defaultVar; // Numatytasis modifikatorius
    private int privateVar;

    public void publicMethod() {
        // Gali pasiekti visas kintamąsias
        System.out.println("ClassA viešas metodas");
    }

    protected void protectedMethod() {
        System.out.println("ClassA apsaugotas metodas");
    }

    void defaultMethod() {
        System.out.println("ClassA numatytasis metodas");
    }

    private void privateMethod() {
        System.out.println("ClassA privačios metodas");
    }

    public void accessMembers() {
        publicVar = 1;
        protectedVar = 2;
        defaultVar = 3;
        privateVar = 4; // Gerai, prieinama klaso viduje
        privateMethod(); // Gerai, prieinama klaso viduje
    }
}
// ClassB to paties paketo com.example.package1
package com.example.package1;

public class ClassB {
    public void accessClassAMembers(ClassA objA) {
        objA.publicVar = 10; // Gerai, public
        objA.protectedVar = 20; // Gerai, protected (tas pats paketas)
        objA.defaultVar = 30; // Gerai, default (tas pats paketas)
        // objA.privateVar = 40; // Klaidų kompiliavimas, private
        objA.publicMethod(); // Gerai, public
        objA.protectedMethod(); // Gerai, protected (tas pats paketas)
        objA.defaultMethod(); // Gerai, default (tas pats paketas)
        // objA.privateMethod(); // Klaidų kompiliavimas, private
    }
}
// ClassC kitame pakete com.example.package2
package com.example.package2;
import com.example.package1.ClassA;

public class ClassC extends ClassA { // ClassC yra potėvė ClassA
    public void accessClassAMembersFromSubclass() {
        publicVar = 100; // Gerai, public
        protectedVar = 200; // Gerai, protected (potėvė, net ir kitame pakete)
        // defaultVar = 300; // Klaidų kompiliavimas, default (kito paketo)
        // privateVar = 400; // Klaidų kompiliavimas, private

        publicMethod(); // Gerai, public
        protectedMethod(); // Gerai, protected (potėvė, net ir kitame pakete)
        // defaultMethod(); // Klaidų kompiliavimas, default (kito paketo)
        // privateMethod(); // Klaidų kompiliavimas, private
    }
}
// ClassD kitame pakete com.example.package2
package com.example.package2;
import com.example.package1.ClassA;

public class ClassD {
    public void accessClassAMembers(ClassA objA) {
        objA.publicVar = 1000; // Gerai, public
        // objA.protectedVar = 2000; // Klaidų kompiliavimas, protected (kito paketo, ne potėvė)
        // objA.defaultVar = 3000; // Klaidų kompiliavimas, default (kito paketo)
        // objA.privateVar = 4000; // Klaidų kompiliavimas, private

        objA.publicMethod(); // Gerai, public
        // objA.protectedMethod(); // Klaidų kompiliavimas, protected (kito paketo, ne potėvė)
        // objA.defaultMethod(); // Klaidų kompiliavimas, default (kito paketo)
        // objA.privateMethod(); // Klaidų kompiliavimas, private
    }
}
```}]},