Это мой первый класс
public class DigitalDevice {
public int abc = 1;
}
И это мой второй урок
public class SmartPhone extends DigitalDevice {
SmartPhone() {
abc = 2;
super.abc=3;
DigitalDevice.abc=4;
}
}
В классе SmartPhone, когда я вспоминаю abc, DigitalDeviceabc доступен и изменяем, а когда я вспоминаю super.abc, abc DigitalDevice также доступен и изменяем, но когда я вспоминаю DigitalDevice.abc, DigitalDeviceabc недоступен и не изменяем. и IDE выдает ошибку и просит сделать abc статическим в классе DigitalDevice.
Правда ли, что в SmartPhone классе abc есть super.abc есть DigitalDevice.abc?
Прежде чем публиковать сообщения здесь, изучите Учебные пособия по Java , предоставляемые Oracle бесплатно. См. страницу статические поля участников, что касается DigitalDevice.abc.




Нет, это неправда. abc и super.abc такие же, как и this.abc (не используется в вашем коде). Но DigitalDevice.abc — это попытка вызвать статическое поле с именем abc в классе DigitalDevice. В этом классе нет такого статического поля, и ваша IDE справедливо говорит вам об этом. Проверьте Когда использовать статическую/нестатическую переменную в JAVA, в чем разница между статической и нестатической переменной.
так почему же я, когда меняю abc в классе смартфона, abc в классе digitalDevice также меняется? после изменения abc в классе смартфона, когда я печатаю abc и super.abc, они имеют одинаковое значение, как мне изменить нестатическую переменную?
@BehnamR Существует только одно общедоступное поле abc, которое наследуется классом SmartPhone. Коды abc, super.abc и this.abc ссылаются на одно и то же поле вашего экземпляра SmartPhone.
Чтобы уточнить, класс и объект — это не одно и то же. Объект — это экземпляр класса. Если использовать аналогию, «класс» можно сравнить с чертежом телефона, а объектом является сам телефон. Следовательно, статическое свойство или метод можно вызвать только из класса (проекта), например SmartPhone.anyStaticProperty. Напротив, нестатическое свойство или метод можно вызвать только из экземпляра класса, например SmartPhone smartPhone = new SmartPhone(); smartPhone.abc
Ваш код не компилируется. Прежде чем публиковать здесь, доведите свой код до момента компиляции или задайте вопрос о конкретном моменте, когда он не может скомпилироваться.