@MishaXXL

Почему public и static класса дают одинаковый доступ?

Как я понял из теории по Java
public - свойства и методы, которые могут быть вызваны экземпляром класса
static - свойства и методы, которые могут быть вызваны непосредственно классом
public static - методы могут быть вызваны, как экземпляром, так и самим классом
а значение свойств становятся общими для всех экземпляров класса и привязаны к свойству класса

Почему в данном случае я могу обратиться к статическому свойству через экземпляр?
Мне казалось здесь должно быть public int num; илиpublic static int num; , чтобы этот код работал корректно
Просто зачем тогда public static, если просто staticотработает по такой же логике

public class MyClass {
    public static void main(String args[]) {
      Java java = new Java(5);

      System.out.println(java.num);
    }
}

class Java {
    
    static int num;
    
    Java(int i) {
        num = i;
    }
}
  • Вопрос задан
  • 3021 просмотр
Решения вопроса 2
Sputterspark
@Sputterspark
Неправильно поняли. Модификатор static определяет к чему относится поле или метод - к классу или его экземпляру, доступ он не регулирует.
Ответ написан
Комментировать
xez
@xez Куратор тега Java
TL Junior Roo
В джаве есть четыре модфикатора доступа:
public
private
protected
и
"default", когда никакой не указан.
default - который, вы используете, когда убираете public, обладает свойствами "package private", т.е. видимость внутри пакета.

Пример:

package mypackage.second;

public class SomeClass {
    int a;
}


package mypackage.first;

import mypackage.second.SomeClass;

public class Main {
    public static void main(String[] args) {

        var someClass = new SomeClass();

        System.out.println(someClass.a); // a is not public in mypackage.second.SomeClass; cannot be accessed from outside package
    }
}


static - это вообще не о доступе.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы