调用子类方法?

时间:2019-03-15 05:42:52

标签: java inheritance

所以,我有这个超类:

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
}

^我无法在我的代码中执行此操作。为什么不呢?

我该怎么做?

谢谢

4 个答案:

答案 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);