所以,我有这个超类:
public class Guest {
private int id;
private String firstName;
private String lastName;
private LocalDate joinDate;
public Guest(int id, String firstName, String lastName, LocalDate joinDate){
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
this.joinDate = joinDate;
}
public int getID(){ return id; }
public String getFirstName(){ return firstName; }
public String getLastName(){ return lastName; }
public LocalDate getJoinDate(){ return joinDate; }
}
及其子类
public class VIP extends Guest{
private LocalDate VIPstartDate;
private LocalDate VIPexpiryDate;
public VIP(int id, String firstName, String lastName, LocalDate joinDate, LocalDate VIPstartDate, LocalDate VIPexpiryDate){
super(id, firstName, lastName, joinDate);
this.VIPstartDate = VIPstartDate;
this.VIPexpiryDate = VIPexpiryDate;
}
public LocalDate getVIPstartDate(){ return VIPstartDate; }
public LocalDate getVIPexpiryDate(){ return VIPexpiryDate; }
}
在另一堂课中,我有一个名为“来宾”的列表,其中存储了所有来宾信息。
如何调用这样的VIP子类方法? (访客是存储访客信息的列表)
for (Guest guest : guests){
guest.getid() // so this calls from the super class - this works
guest.getVIPstartDate() // this is meant to call from sub class - this doesn't work
}
^我无法在我的代码中执行此操作。为什么不呢?
我该怎么做?
谢谢
答案 0 :(得分:2)
您必须先将其投射:
((VIP) guest).getVIPstartDate()
答案 1 :(得分:2)
您将来宾实例化为超类。如果不进行强制转换,该软件将无法知道您真正想要VIP。 有很多不同的方法可以解决这个问题。
正如我上面提到的安德鲁尼库斯所说,铸造是最明显的解决方案。 (通常也是类似的家庭作业所寻找的内容),但是在这里您需要小心以确保它实际上是正确的子类。
if (guest instanceof VIP){
((VIP) guest).getVipStartDate();
}
答案 2 :(得分:2)
此解决方案将起作用。
((VIP) guest).getVIPstartDate();
答案 3 :(得分:0)
这是可能有助于调用子类'class Manager扩展Employee {的示例之一。 。 。 public void setBonus(double b){bonus = b; }私人双倍奖金;这些方法和字段没有什么特别的。如果您有Manager对象,则可以简单地应用setBonus方法。
经理老板=。 。 。; boss.setBonus(5000);