【发布时间】:2020-08-26 14:16:02
【问题描述】:
例如,我有一个类(Account)和 2 个子类(BasicAccount 和 PremiumAccount)。
如果我创建这样的对象
Account account1 = new BasicAccount();
是否可以将 account1 子类更改为 PremiumAccount?
【问题讨论】:
-
您可以分配例如
account1 = new PremiumAccount();但是没有办法将BasicAccount的实例更改为PremiumAccount。 -
没有内置方法,你必须编码。例如。
account1 = new PremiumAccount(account1)如果您需要保留一些字段,请使用适当的构造函数。 -
否:如果
BasicAccount和PremiumAccount都是Account的直接子类,那么BasicAccount不是PremiumAccount。你可以构建一个PremiumAccount来自一个BasicAccount。 -
如果帐户可以在功能上升级为高级帐户或从高级帐户降级,您可以考虑将高级帐户定义为您帐户的属性 (
private boolean isPremium;) 而不是子类。 -
这是一个像 state-pattern 或 decorator-pattern 这样的设计模式的用例,而不是继承。 “高级”或“基本”是帐户的状态,而不是更具体的类型。