Это мой первый класс
public class DigitalDevice {
public int abc = 1;
}
И это мой второй урок
public class SmartPhone extends DigitalDevice {
SmartPhone() {
abc = 2;
super.abc=3;
DigitalDevice.abc=4;
}
}
В классе SmartPhone
, когда я вспоминаю abc
, DigitalDevice
abc
доступен и изменяем, а когда я вспоминаю super.abc
, abc DigitalDevice
также доступен и изменяем, но когда я вспоминаю DigitalDevice.abc
, DigitalDevice
abc
недоступен и не изменяем. и 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
Ваш код не компилируется. Прежде чем публиковать здесь, доведите свой код до момента компиляции или задайте вопрос о конкретном моменте, когда он не может скомпилироваться.