Sobes.tech
Junior

Как работает модификатор доступа protected в языках программирования?

sobes.tech MI

Válasz az MI-től

A protected hozzáférés módosító meghatározza az osztály tagjainak (mezők, metódusok) láthatósági szintjét. A hozzáférés korlátozott:

  1. Osztályon belül: A hozzáférés engedélyezett. A protected tagok bárhonnan láthatók az osztályon belül.
  2. Öröklődő osztályokban: A hozzáférés engedélyezett. Azok az osztályok, amelyek öröklik egy protected tagokkal rendelkező osztálytól, közvetlenül hozzáférhetnek ezekhez a tagokhoz, még akkor is, ha más csomagban vannak (egyes nyelveken, például Java).
  3. Ugyanazon csomagban (egyes nyelveken, például Java): A hozzáférés engedélyezett, egyenértékű a default (csomag-privát) hozzáféréssel. A protected tagok láthatók minden osztály számára ugyanabban a csomagban, függetlenül az örökléstől.
  4. Kívülről (más csomagok, nem öröklődő osztályok): A hozzáférés tiltott. A protected tagokhoz való közvetlen hozzáférés nem lehetséges olyan osztályokból, amelyek nem öröklik vagy nem ugyanabban a csomagban vannak (Java).

Példa (Java):

class BaseClass {
    protected int protectedMember = 10;

    protected void protectedMethod() {
        // Osztályon belüli hozzáférés engedélyezett
        System.out.println("BaseClass védett metódusa");
    }
}

class DerivedClass extends BaseClass {
    void accessProtected() {
        // Öröklődő osztályból való hozzáférés engedélyezett
        System.out.println(protectedMember);
        protectedMethod();
    }
}

class SamePackageClass {
    void accessProtected(BaseClass obj) {
        // Java-ban ugyanazon csomagban lévő másik osztályból való hozzáférés engedélyezett
        System.out.println(obj.protectedMember);
        obj.protectedMethod();
    }
}

class DifferentPackageClass {
    // ...
    // A hozzáférési kísérlet fordítási hibát fog okozni
    // obj.protectedMember;
    // obj.protectedMethod();
}

Így a protected magasabb szintű enkapszulációt biztosít, mint a public, de alacsonyabbat, mint a private vagy a default, lehetővé téve az osztálytagok hozzáférését öröklődéssel és bizonyos nyelveken ugyanabban a csomagban lévő osztályok számára.