Статические методы привязаны к классу.
Нестатические методы привязаны к экземпляру класса (объекта).
Это означает, что вы можете вызывать статические методы (напрямую) следующим образом:
SomeClass.someStaticMethod();
Но чтобы вызывать нестатические методы, сначала нужно создать объект класса (это то, что вы подразумеваете под «косвенно»):
SomeClass obj = new SomeClass();
obj.someNonStaticMethod();
<Ч />
Итак, если вы используете статический метод, вы находитесь вне объекта-экземпляра. Это означает, что вы не можете вызывать нестатический метод. Java волшебным образом не знает, с каким объектом вы хотели бы работать / выполнять метод.
public static void someStaticMethod()
{
//You aren't working with any object here
}
Однако, если вы используете нестатический метод, вы находитесь внутри объекта-экземпляра. Это означает, что вы можете вызвать другой нестатический метод объекта, с которым вы работаете сейчас. Это все нестатические методы в классе (и суперклассы, если они правильно установили модификатор доступа).
public void someNonStaticMethod()
{
//This is valid now.
this.someOtherNonStaticMethod(); //"this." is optional
}
public void someOtherNonStaticMethod()
{
//Do some stuff
}
<Ч />
Каковы косвенные способы, которыми я могу это сделать?
«Непрямой» способ вызова нестатического метода из статического состоит в том, чтобы сначала создать объект класса с помощью нестатического метода (как показано во втором кодовом блоке).