Существует 4 модификатора доступа:

public

private

protected

package(т.е. модификатор не указан)

Рассмотрим подробнее(+ есть доступ к полям и методам, нет доступа)

Пример. Есть 2 пакета p1 и p2. В пакете p1 классы А, B, C., а в пакете p2 классы D и E

1) public — общий доступ

1.1. + доступ в этом классе

package p1;
public class A {
public int count = 10;
public static void main(String[] args) {
A a = new A();
System.out.println(a.count);
}
}

1.2 + этот пакет и подкласс

package p1;

public class B extends A{
public void testMod () {
B b = new B();
System.out.println(b.count);
}
}

1.3 + этот пакет и НЕ подкласс

package p1;

public class C {
public void testMod1 () {
A a = new A();
System.out.println(a.count);
}
}

1.4. + другой пакет и подкласс

package p2;
import p1.A;

public class D extends A{
public void testMod2 () {
D d = new D();
System.out.println(d.count);
}
}

1.5 + другой пакет и НЕ подкласс

package p2;
import p1.A;
public class E {
public void testMod3 () {
A a = new A();
System.out.println(a.count);
}
}

Т.е. public — методы и поля доступны везде

Теперь в классе A сделаем «protected int count = 10;»

У всех классов будет доступ к полю count,  кроме класса E (другой пакет и не подкласс)

Теперь сделаем доступ package.

Теперь доступ к полю count будет у классов A, B, C (т.е. классов, находящихся в одном пакете)

Если сделать private, то поле count будет доступно только  в классе А, т.е. в классе, которому данное поле относится

Выводы:

1. public — дает доступ к методам и полям класса из любой точки программы

2. Если мы действуем в одном пакете, то не важно, как объявлять поля или методы public / protected / package

3. Благодаря protected мы можем вызывать поля и методы из супер класса, т.е. в данном случае из A

4. Если поле объявлено как private, это значит, что нельзя получить доступ к этому полю, кроме класса, в котором это поле находится

 

Реклама