Llamar a un método de clase hijo desde un objeto de clase padre
Tengo las siguientes clases
class Person {
private String name;
void getName(){...}}
class Student extends Person{
String class;
void getClass(){...}
}
class Teacher extends Person{
String experience;
void getExperience(){...}
}
Esta es solo una versión simplificada de mi esquema real. Inicialmente, no sé el tipo de persona que se necesita crear, por lo que la función que maneja la creación de estos objetos toma el control general.Person
Objeto como parámetro.
void calculate(Person p){...}
Ahora quiero acceder a los métodos de las clases secundarias utilizando este objeto de clase principal. También necesito acceder a los métodos de clase de los padres de vez en cuando paraNO PUEDO HACERLO ABSTRACTO.
Creo que simplifiqué demasiado en el ejemplo anterior, así que aquí va, esta es la estructura real.
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())
{...}
}
}
La instrucción if dice "no se puede encontrar getMultiple para QuestionOption". OuestionOption tiene muchas más clases para niños que tienen diferentes tipos de métodos que no son comunes entre los niños (getMultiple no es común entre los niños)