我了解如何使用继承来访问方法,但我不明白当对象的类型是父对象时如何访问子对象的字段。
(我的问题纯粹是关于架构的,所以语言应该不重要,但仅供参考,我正在使用 Dart)
我有一个父对象和另外两个继承自它的对象:
class User {
String id;
String name;
}
class Person extends User {
DateTime birthDate;
}
class Company extends User {
String address;
}
当我必须访问父类对象上特定于子案例的这些字段时,我的问题就出现了。我的应用程序的登录用户类型为
User
,但根据类型,我将必须显示或编辑特定字段。
例如,在 ProfileView 中,
Person
用户应显示出生日期,Company
用户应显示地址。 EditProfile 的情况也是如此。
这是我到目前为止的解决方案:
User user;
//Initialization and other code
if (user is Person) displayBirthDate();
else if (user is Company) displayAddress();
但这并没有利用继承的特性。
我的问题纯粹是概念性的,与语言无关:如何访问父类类型的对象中子类的字段?
这就是您所做的,其中 LSP 声明 子类型必须可替换其父类型。
我不知道你的问题到底是什么,但它围绕着字段的访问。
假设您有一个接受用户作为参数的方法:
void buildMyWidget(User user){
if(user is Person){
// dart analyzer detects the type, and let you access the Person fields
}
else if (user is Company){
// same access for Company fields
}
else{
//it's the parent
}
}
您可以切换该对象以检测其类型。
此外,您甚至可以将该方法封装在父类中,并在子类型中重写它,这使您无需使用
if-else
或 switch
进行硬类型检查。
顺便说一句,我问了一个关于这一点的类似问题,但与小部件构建更多重叠。 这里
希望对您有帮助。