У меня есть следующие классы
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){...}
Теперь я хочу получить доступ к методам дочерних классов, используя этот объект родительского класса. Мне также нужно время от времени обращаться к методам родительского класса, поэтому Я НЕ МОГУ СДЕЛАТЬ ЭТО РЕЗЮМЕ.
Я думаю, я упростил слишком много в приведенном выше примере, так что здесь идет речь, это фактическая структура.
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 не распространен среди детей)