我必须使用 instanceof 还是有任何多态解决方案?
Do I have to use instanceof or is there any polymorphic solution?
我的任务是创建一个简单的约会 superclass
,包含三个(每日、一次性、每月)subclasses
。
然后我需要要求用户输入不同的约会并通过名为 add
的方法将它们存储在 ArrayList
中。用户也应该 select 预约的类型。
我是多态的新手,尝试找到多态解决方案而不是使用 instanceof
运算符。
我的情况可以吗?
你能帮我更好地理解 polymorphism
吗?
您可以从此处的 Java 教程开始:https://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html
您根本不需要 instanceof 运算符。预约 class 并每次(每日、一次性、每月)延长预约,以便他们可以使用它的变量和方法。
示例:
public Daily extends Appointment
从那里您应该能够制作一个主 class 来测试您制作的内容并将值存储在 ArrayList 中。例如:
List<Appointment> arrayList = new ArrayList<Appointment>();
arrayList.add("supply subclass object that you've created here");
继续添加,直到所有子class都已添加到您的约会数组列表中。希望这有帮助。
如果你只需要 store/add 一个 ArrayList
中的所有子类型,那么你可以选择类型参数('<' 和 '>' 中的 Class
类型)作为超级class即Appointment
。所以你可以做 List<Appointment> apps = new ArrayList<Appointment>();
现在您可以按如下方式存储所有子类型:-
apps.add(new Daily());
apps.add(new OneTime());
apps.add(new Monthly());
如果你想从这个 ArrayList
中获取任何对象,你也可以将它分配到父类型的引用变量中,即 Appointment
as Appointment a = apps.get(0);
最后,如果您想在此 a
变量上调用任何重写方法
它会通过 Polymorphism
.
的 属性 自动调用实际子类型的覆盖方法
此外,如果您想在某个地方专门检查 Appointment
参考变量的 class,您可以使用 getClass()
方法并将其与子类进行比较。所以我不确定你为什么要在什么地方使用 instanceof
。希望这可以稍微清除您的疑问。
实际上,如果使用 接口 会更好。
接口指定契约(即 class 应该是什么以及它应该能够做什么),并有助于避免相关问题
继承例如对 superclass 方法的依赖。
并且仍然让您继承其他 classes。
总体而言 - 界面更加灵活。
我会编码:
public Daily implements Appointment
然后就像 @unsensibled 提到的那样:
List<Appointment> arrayList = new ArrayList<>();
Appointment daily = new Daily();
arrayList.add(daily);
我的任务是创建一个简单的约会 superclass
,包含三个(每日、一次性、每月)subclasses
。
然后我需要要求用户输入不同的约会并通过名为 add
的方法将它们存储在 ArrayList
中。用户也应该 select 预约的类型。
我是多态的新手,尝试找到多态解决方案而不是使用 instanceof
运算符。
我的情况可以吗?
你能帮我更好地理解 polymorphism
吗?
您可以从此处的 Java 教程开始:https://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html
您根本不需要 instanceof 运算符。预约 class 并每次(每日、一次性、每月)延长预约,以便他们可以使用它的变量和方法。
示例:
public Daily extends Appointment
从那里您应该能够制作一个主 class 来测试您制作的内容并将值存储在 ArrayList 中。例如:
List<Appointment> arrayList = new ArrayList<Appointment>();
arrayList.add("supply subclass object that you've created here");
继续添加,直到所有子class都已添加到您的约会数组列表中。希望这有帮助。
如果你只需要 store/add 一个 ArrayList
中的所有子类型,那么你可以选择类型参数('<' 和 '>' 中的 Class
类型)作为超级class即Appointment
。所以你可以做 List<Appointment> apps = new ArrayList<Appointment>();
现在您可以按如下方式存储所有子类型:-
apps.add(new Daily());
apps.add(new OneTime());
apps.add(new Monthly());
如果你想从这个 ArrayList
中获取任何对象,你也可以将它分配到父类型的引用变量中,即 Appointment
as Appointment a = apps.get(0);
最后,如果您想在此 a
变量上调用任何重写方法
它会通过 Polymorphism
.
此外,如果您想在某个地方专门检查 Appointment
参考变量的 class,您可以使用 getClass()
方法并将其与子类进行比较。所以我不确定你为什么要在什么地方使用 instanceof
。希望这可以稍微清除您的疑问。
实际上,如果使用 接口 会更好。 接口指定契约(即 class 应该是什么以及它应该能够做什么),并有助于避免相关问题 继承例如对 superclass 方法的依赖。 并且仍然让您继承其他 classes。 总体而言 - 界面更加灵活。
我会编码:
public Daily implements Appointment
然后就像 @unsensibled 提到的那样:
List<Appointment> arrayList = new ArrayList<>();
Appointment daily = new Daily();
arrayList.add(daily);