从父类对象调用子类方法

我有以下课程

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语句显示“无法为QuestionOption找到getMultiple”。OuestionOption具有更多的子类,这些子类具有在子代之间不常见的不同类型的方法(getMultiple在子代之间不常见)

回答:

虽然这是可行的,但完全不建议使用,因为它会破坏继承的原因。最好的方法是调整你的应用程序设计,使有

父母和孩子之间的依赖关系。父母永远不需要知道自己的孩子或他们的能力。

但是,您应该能够做到:

void calculate(Person p) {

((Student)p).method();

}

一种安全的方法是:

void calculate(Person p) {

if(p instanceof Student) ((Student)p).method();

}

以上是 从父类对象调用子类方法 的全部内容, 来源链接: utcz.com/qa/404638.html

回到顶部