Я хочу инициализировать атрибут, унаследованный подклассом, как финал. Однако, когда я обращаюсь к атрибуту, кажется, меняет , поэтому я предполагаю, что я создал еще один последний атрибут. Можно ли сделать атрибут, упомянутый в суперклассе, конечным атрибутом без создания другого атрибута?
Упрощенный код:
public abstract Superobj {
protected boolean attribute = false;
protected String condition; //A condition to be checked in a subclass
protected String[] collection; //Stores strings
protected int howmany= 0;
public Superobj(int i){
this.collection = new String[i];}
public void insert(String s){
this.collection[howmany] = s;
howmany++;
if (s == condition) {attribute = true;}}
Я использую другой объект другого класса для передачи аргументов в вставить метод. Конструктор в подклассе инициализирует условие:
public Subclass extends Superclass{
public Sublclass(int i){
super(i);
this.condition = "cond";}}
Однако в одном подклассе я не хочу изменять атрибут - независимо от того, что вставлено в таблицу. Я хочу сделать это окончательным, навсегда ложным, например. Я попытался:
public FinalSubclass extends Superclass {
protected final boolean condition = false;
...
Однако, когда я проверил значение this.attribute, оно меняется в зависимости от значения переданного аргумента - как если бы был создан еще один this.attribute, противоположный унаследованные. Я не могу добавить в конструктор подкласса что-то вроде:
final this.attribute = false;
Есть ли способ изменить унаследованный атрибут на final? Будет ли исключение, если передать что-то, соответствующее условию, и унаследованный метод попытается изменить атрибут?