gpt4 book ai didi

java - Java中如何正确使用多态调用正确类的方法

转载 作者:行者123 更新时间:2023-12-05 08:11:11 26 4
gpt4 key购买 nike

假设我有一个电影院注册系统。

而且我有一个父类 Customer 和一个子类 MinorCustomer

MinorCustomer 有一个 isAuthorized() 方法,在 Customer 中不存在,返回 true 或false,意味着如果所选电影不适合无人陪伴的未成年人,则调用

现在,当实例化类以将信息存储在数据结构中(无论哪个)时,我遇到了一个问题,即如果客户是未成年人,我无法调用 isAuthorized()

这都是假设的,所以没有包含这段代码的程序,但假设情况是

Customer cust = new Customer()
if(cust.getAge() < 18) {
cust = (MinorCustomer) cust;
cust.isAuthorized();
}

但是,该代码将无效,因为它仍会将 cust 视为 Customer 的实例,而不是 MinorCustomer。我知道我可以简单地使用 if 语句来确定是否要根据年龄创建 Customer/Minor 的新实例,但我想利用多态性来无缝更改类型,而不必编写更严格的代码代码。

最佳答案

创建一个 CustomerFactory,它根据年龄参数提供适当类型的客户。

依托原则

class Customer { }
class MinorCustomer extends Customer { }

...那么您的工厂的实现可能是:

class CustomerFactory {
public static Customer createInstance(final int age) {
if(age < 18) {
return new MinorCustomer();
} else {
return new Customer();
}
}
}

...然后可以像这样在您的代码中使用它。

Customer cust = CustomerFactory.createInstance(17);

您可以在要求 Customer 不是 MinorCustomer 的方法中强制执行 instanceof 检查,或者您可以对客户进行年龄检查,因为无论如何您都可以免费获得该信息。

关于java - Java中如何正确使用多态调用正确类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61649573/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com