Вызывать методы подкласса? - PullRequest
0 голосов
/ 15 марта 2019

Итак, у меня есть этот суперкласс:

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, как это? (guest - это список, в котором хранится информация о гостях)

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 ]

2 голосов
/ 15 марта 2019

Вы создали своих гостей как суперкласс.Без кастинга у программы не будет возможности узнать, что вы действительно хотите VIP.Есть много разных способов справиться с этим.

Как упомянул выше Андроник, кастинг - наиболее очевидное решение.(Это также, как правило, то, что ищут подобные домашние задания) НО вы должны быть осторожны, чтобы убедиться, что это действительно правильный подкласс для приведения.

if (guest instanceof VIP){
   ((VIP) guest).getVipStartDate();
} 
2 голосов
/ 15 марта 2019

Это решение будет работать.

((VIP) guest).getVIPstartDate();
2 голосов
/ 15 марта 2019

Сначала вы должны разыграть его:

((VIP) guest).getVIPstartDate()
0 голосов
/ 16 марта 2019

Это один из примеров, который, вероятно, поможет при вызове подкласса 'Manager класса extends Employee {. , , public void setBonus (double b) {bonus = b; } частный двойной бонус; } В этих методах и полях нет ничего особенного. Если у вас есть объект Manager, вы можете просто применить метод setBonus.

Менеджер босс =. , . boss.setBonus (5000);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...