我是否必须使用instanceof或是否有任何多态解决方案?

时间:2015-06-30 19:53:13

标签: java inheritance polymorphism

我的任务是创建一个简单的约会superclass,其中包含三个(每日,一次,每月)subclasses

然后我需要让用户输入不同的约会,并通过名为ArrayList的方法将它们存储在add中。用户也应该选择约会的类型。

我是多态的新手,并试图找到一个多态解决方案,而不是使用instanceof运算符。

在我的情况下是否可能?

你能帮助我更好地理解polymorphism吗?

4 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

您根本不需要instanceof运算符。预约课程,每次(每日,一次,每月)延长预约时间,以便他们可以使用它的变量和方法。

示例:

public Daily extends Appointment

从那里你应该能够创建一个主类来测试你所做的事情并将值存储在ArrayList中。例如:

List<Appointment> arrayList = new ArrayList<Appointment>();
arrayList.add("supply subclass object that you've created here");

继续添加,直到所有子类都添加到约会arraylist中。希望这会有所帮助。

答案 2 :(得分:1)

如果您只需要在ArrayList中存储/添加所有子类型,那么您可以选择类型参数('&lt;'和'&gt;'中的Class类型)作为超类即Appointment。所以你可以做List<Appointment> apps = new ArrayList<Appointment>();

现在您可以按如下方式存储所有子类型: -

apps.add(new Daily()); apps.add(new OneTime()); apps.add(new Monthly());

如果您想从此ArrayList获取任何对象,您也可以将其分配为父类型的引用变量,即AppointmentAppointment a = apps.get(0);

最后,如果你想在这个a变量上调用任何override方法 它将通过Polymorphism的属性自动调用实际子类型的overriden方法。

此外,如果您想某处专门检查Appointment引用变量的类,可以使用getClass()方法并将其与子语句进行比较。所以我不确定为什么&amp;你想在哪里使用instanceof。希望这可能会清除您的查询。

答案 3 :(得分:1)

实际上,如果使用接口会更好。 接口指定合同(即该类应该是什么以及它应该做什么),并有助于避免相关问题 继承,例如依赖于超类方法。 并且仍然允许您继承其他类。 总体而言 - 界面更灵活。

我会编码:

public Daily implements Appointment

然后就像 @unsensibled 一样:

List<Appointment> arrayList = new ArrayList<>();
Appointment daily = new Daily();
arrayList.add(daily);