gpt4 book ai didi

java - 多态性,问题在我的程序上

转载 作者:行者123 更新时间:2023-11-30 08:47:53 28 4
gpt4 key购买 nike

我一直在四处寻找,尽管出于某种原因我找到了一些答案,但我似乎无法理解这个概念,这显然会导致我的代码出现问题。

我有这个:

public static Contact createContact() {

Contact contact = null;

if (ContactUI.getRdb_acquaintance().isSelected()) {
contact = new Acquaintance();
} else if (ContactUI.getRdb_friend().isSelected()) {
contact = new Friend();
//contact.setStr_telMobile(ContactUI.getTxt_telMobile().getText());
} else {
contact = new Family();
//contact.setStr_telMobile(ContactUI.getTxt_telMobile().getText());
//contact.setStr_BDay(ContactUI.getTxt_BDay().getText());
}

setCommonDetails(contact);

return contact;
}

一旦我将联系人初始化为其子类之一,我希望能够调用子类特定方法 .setStr_telMobile.setStr_BDay,但我得到一个错误,我无法访问这些方法。我已经在我的代码中注释了这些行。

例如,我认为我应该能够将 Contact 类型的对象初始化为 Friend(Contact 的子类),并访问该子类的专用方法和属性。

最佳答案

无论其运行时类型如何,contact 都是Contact 类型的引用。因此,编译器将只允许您使用 Contact 的方法。

解决这个问题的优雅方法可能是使用临时的 Friend 引用来初始化您需要的所有成员,然后才将其分配给 Contact:

// Snipped
} else if (ContactUI.getRdb_friend().isSelected()) {
Friend temp = new Friend();
temp.setStr_telMobile(ContactUI.getTxt_telMobile().getText());
contact = temp;
}
// snipped

或者,因为您知道您已经为 contact 分配了一个 Friend 实例,您可以明确地将它向下转型为一个 Friend 以访问它的方法:

// Snipped
} else if (ContactUI.getRdb_friend().isSelected()) {
contact = new Friend();
((Friend) contact).setStr_telMobile(ContactUI.getTxt_telMobile().getText());
}
// snipped

关于java - 多态性,问题在我的程序上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32209682/

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