Как получить доступ к (теневым) переменным-членам в подклассе из метода в суперклассе?

1

Дайте мне знать, если кто-то не понимает этот вопрос. Я изо всех сил старался сформулировать вопрос ниже. У меня есть общий метод в родительском классе для генерации шаблона. Для повторного использования я решил сохранить этот метод под родительским классом.

Внутри метода я использую несколько переменных. Поэтому я подумал, что лучше передать объект в качестве параметра методу generatePattern. Но поскольку переменные нельзя переопределить, как я могу использовать соответствующие переменные из этих подклассов? Любая другая функция в java, кроме использования подкласса? Будут ли "общие типы" в качестве параметра работать в таком случае?

class Parent {
    int var1;
    String[] values;

    void generatePattern(Parent obj1) {
        // This will not make use of respective values of 
        // subclass object that is passed I guess.
        newPattern(obj1.values, obj1.var1);    
    }
}

class AscendSubClass extends Parent {
    int var1 = 5;
    String[] values = {"S", "R"};
}

class DescendSubClass extends Parent {
    int var1 = 10;
    String[] values = {"N", "D"};
}

Я могу передать либо AscendSubClass, либо DescendSubClass выше для созданияPattern(). Внутри этого метода мне нужно использовать переменные var1, values и многие другие переменные подклассов. Эти переменные имеют одинаковый тип и имеют одно и то же имя, но значения разные и зависят от подкласса. Как я могу ссылаться на эти переменные сейчас в generatePattern(), чтобы метод не менялся? Этого можно достичь, сделав переменные в качестве параметров для методов или операторами if/else, но мне нужно пройти несколько переменных, и это является большим неудобством.

Теги:
subclass
shadowing
member

1 ответ

1
Лучший ответ

Добавьте метод геттера и переопределите его в любом подклассе.

public int getVar() {
    return var1;
}
  • 0
    Я бы порекомендовал определить getVar и getValues как protected abstract методы в Parent .
  • 0
    Спасибо, сейчас работает. Но в операторе "return var1" внутри переопределенного подкласса, не возвращается ли var1 или родитель? Это означает, что мы можем переопределить переменную в случае метода getter, но не иначе? Я немного запутался. следующие два оператора печатают по-разному: System.out.println ("var1 =" + obj1.getter ()); System.out.println ("Var1 напечатано без getter =" + obj1.var1);
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню