В Java “кто-то”, кто имеет доступ к методу, — это любой объект или класс, который имеет к нему доступ в зависимости от модификатора доступа, который указан в сигнатуре метода.
Давайте разберём, как это работает с разными уровнями доступа.
1. Модификаторы доступа и область видимости методов
public
: метод доступен из любого класса, то есть его может вызвать любой объект или класс, у которого есть ссылка на объект содержащего метода.protected
: метод доступен в том же пакете и в классах-наследниках, даже если они находятся в другом пакете.default
(или без модификатора, называемый также package-private): метод доступен только для классов внутри того же пакета.private
: метод доступен только внутри класса, в котором он объявлен, и не может быть вызван из других классов.
2. Контекст вызова метода
Метод могут вызвать разные типы сущностей в коде, в зависимости от его контекста и модификаторов доступа:
- Внутри самого класса: любой метод класса может вызывать другие методы того же класса, включая приватные.
- Из объектов других классов: если метод является
public
, его можно вызывать на объекте из любого класса, например,myObject.someMethod()
. - Из классов-наследников: если метод помечен как
protected
илиpublic
, его можно вызывать из подклассов (при наследовании).
Пример: вызов метода с разными модификаторами доступа
class Example {
public void publicMethod() {
System.out.println("Public method");
}
protected void protectedMethod() {
System.out.println("Protected method");
}
void defaultMethod() {
System.out.println("Default method");
}
private void privateMethod() {
System.out.println("Private method");
}
}
Допустимые вызовы этих методов будут зависеть от того, откуда они вызываются:
- Внутри самого класса
Example
можно вызвать все методы. - Из другого класса в том же пакете можно вызвать
public
,protected
, иdefault
методы. - Из класса в другом пакете можно вызвать только
public
методы, аprotected
методы — только если другой класс наследуетExample
.
Таким образом, “кто-то” — это объект или класс, имеющий соответствующий доступ к методу и способный вызвать его в зависимости от контекста и модификатора доступа вызываемого метода.