基于逻辑构建对象类型 - 这可行吗?

3
我希望有人能指导我正确的方向。我似乎无法在任何地方找到解决这个问题的合适方案。
我有一个名为“Student”的抽象类。三个外部类扩展了Student,它们分别被称为“Graduate”、“Undergraduate”和“PartTime”。在我的主方法中,我想根据某些逻辑构造一个对象,可以是研究生、本科生或兼职学生。例如:
if (something) { Graduate student = new Graduate(); }
else if (something { Undergraduate student = new Undergraduate(); }

如果我尝试这样做,编译器(我正在使用Netbeans)会抱怨对象student已经被定义了。如果我尝试这样做:

Student student;
if (something) { student = new Graduate(); }

学生无法访问与研究生特有方法有关的任何方法。

如果我将三个扩展类作为Student的内部静态类,是否会有任何变化?

希望问题已经很清楚了。您有关于如何解决此问题的任何建议吗?感谢您提供任何建议!

2个回答

3
你可以这样做:
Student student;
if (something) {
  Graduate graduate = new Graduate();
  graduate.visitMissisRobinson( );

  student = graduate;
}
else if (somethingElse) {
  Undergraduate undegradStudent = new Undergraduate();

  undegradStudent.declareMajor( );

  student = undegradStudent;
}

// now only do common methods of student
student.chargeTuition( );

你也可以使用显式转换,但这绝对更加简洁。 - David Titarenco
我没有想过使用中间件。谢谢。 - user1550058
这个不起作用: if (something) { Graduate graduate = new Graduate(); student = graduate; }一旦我尝试调用特定于研究生的方法,编译器就会问我是否应该在学生下创建该方法。有任何想法为什么会这样? - user1550058

0
如果您想深入了解有关该主题的更多信息,请查找一些工厂模式:

工厂模式


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接