我的任务是创建一个简单的约会superclass
,其中包含三个(每日,一次,每月)subclasses
。
然后我需要让用户输入不同的约会,并通过名为ArrayList
的方法将它们存储在add
中。用户也应该选择约会的类型。
我是多态的新手,并试图找到一个多态解决方案,而不是使用instanceof
运算符。
在我的情况下是否可能?
你能帮助我更好地理解polymorphism
吗?
答案 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
获取任何对象,您也可以将其分配为父类型的引用变量,即Appointment
为Appointment 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);