[Я знаю, что следующее не соблюдает правила ООП, это проект раннего dev. Я сделаю все сеттеры и геттеры позже]Как наследовать личную переменную в обработке?
У меня есть класс под названием «Item», который содержит личное поле «имя».
abstract class Item{
protected PImage texture;
protected int durability;
protected int maxDurability;
private String name;
}
У меня также есть класс под названием «Броня», который наследует «Предмет». Таким образом, он должен наследовать имя «private» частного поля, верно?
class Armor extends Item{
protected int defense;
Armor(){
//First try to change the value
name = "Armor";
//Second try using 'this' to be sure it doesn't try to change super.name
this.name = "Armor";
}
}
В обоих случаях у меня есть ошибки, когда я пытаюсь изменить значение: «Поле Time_Fighter.Item.name не видно».
После прочтения некоторых материалов о том, как «частный» работает в обработке, я обнаружил, что некоторые люди предложили вместо этого использовать «защищенный».
Дело в том, что если я использую 'protected', каждый класс имеет к нему доступ. Но я просто хочу, чтобы «Item» и подклассы «Item» имели доступ к их приватным полям, унаследованным от «Item».
я мог бы сделать довольно очевидную ошибку, так как я своего рода только начинающий, так что если это не соответствует предполагаемому способ сделать это, пожалуйста, скажите мне, как я должен это сделать ...
[Изменить. Кажется, из ответов, которые я видел, это невозможно. Итак, есть ли способ иметь переменную, которая будет доступна только для подклассов, а не для всего пакета?]
«Правильно?» Неправильно. Частные поля не наследуются. И 'protected' означает, что только подклассы (и члены одного и того же пакета, см. [Tutorial] (https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html)) могут получить к нему доступ. Тот, который разрешает доступ ко всем классам, является 'public'. – RealSkeptic
@RealSkeptic, за исключением пакетов обработки, не разрешены, поэтому «защищенный» делает то же самое, что и «public». – CLOVIS
Вот хороший [обманывающий лист] (http://stackoverflow.com/a/33627846/276052) для модификаторов доступа в java , – aioobe