Вызовите метод дочернего класса из родительского объекта класса

У меня есть следующие классы

class Person {
    private String name;
    void getName(){...}}

class Student extends Person{
    String class;
    void getClass(){...}
}

class Teacher extends Person{
    String experience;
    void getExperience(){...}
}

Это просто упрощенная версия моей реальной схемы. Первоначально я не знаю тип человека, который должен быть создан, поэтому функция, которая обрабатывает создание этих объектов, принимает общиеPerson объект как параметр.

void calculate(Person p){...}

Теперь я хочу получить доступ к методам дочерних классов, используя этот объект родительского класса. Мне также нужно время от времени получать доступ к методам родительского класса, такI CANNOT MAKE IT ABSTRACT.

Я предполагаю, что я слишком упростил в приведенном выше примере, так что здесь, это фактическая структура.

class Question {
  // private attributes
  :
  private QuestionOption option;
  // getters and setters for private attributes
  :
  public QuestionOption getOption(){...}
 }

 class QuestionOption{
 ....
 }
 class ChoiceQuestionOption extends QuestionOption{
 private boolean allowMultiple;
 public boolean getMultiple(){...}
 }

 class Survey{
  void renderSurvey(Question q) {
      /*
          Depending on the type of question (choice, dropdwn or other, I have to render
          the question on the UI. The class that calls this doesnt have compile time 
          knowledge of the type of question that is going to be rendered. Each question 
          type has its own rendering function. If this is for choice , I need to access 
          its functions using q. 
      */
      if(q.getOption().getMultiple())
        {...}
  }
 }

В операторе if говорится, что «не удается найти getMultiple для QuestionOption». OuestionOption имеет гораздо больше дочерних классов, которые имеют различные типы методов, которые не распространены среди детей (getMultiple не распространена среди детей)

Ответы на вопрос(7)

Ваш ответ на вопрос