Как вернуть переменную, которая является эксклюзивной для одного подкласса? - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть класс Person, который имеет несколько подклассов. Все подклассы имеют одинаковые переменные (name, address, phone), но у одного есть дополнительная переменная, rank. Я знаю, как отобразить name, address, phone, но не знаю, как отобразить rank.

Определить класс:

public class Person {
    public String name;
    public String address;
    public String phone;

    public Person(String name, String address, String phone) {
        this.name = name;
        this.address = address;
        this.phone = phone;
    }

    public String toString() {
        return this.getClass().getName() + "\n" + name;
    }
}

Определить подкласс с rank:

public class Pupil extends Person {
    public String rank;
    public Student(String name, String address, String phone, String rank) {
        super(name, social, phone);
    }

}

Создать pupil и отобразить name, address и phone.

public class Test {

public static void main(String[] args) {
Person person = new Person("John", "1 John Deer Rd", "1112223333");
Person pupil = new Pupil("Jane", "2 John Deer Rd", "1112223333", "junior");


System.out.println(pupil.name + "'s phone is " + pupil.phone + " and their address is " + pupil.address + "." + "\n");

}
}

Как мне также отобразить rank

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

Вы должны привести объект из Person обратно к Pupil:

((Pupil)pupil).rank

И если вы не уверены на 100%, что ваш объект на самом деле является учеником, вы следует добавить проверку работоспособности:

if(pupil instanceof Pupil) {
    System.out.println(…+((Pupil)pupil).rank+…);
}
1 голос
/ 08 апреля 2020

Вы можете использовать конструктор Pupil вместо конструктора Person

public class Pupil extends Person {
    public String rank;
    public Pupil (String name, String address, String phone, String rank) {
        super(name, social, phone);
    }

}
Pupil pupil = new Pupil("Jane", "2 John Deer Rd", "1112223333", "junior");pupil = new Pupil("Jane", "2 John Deer Rd", "1112223333", "junior");
System.out.println(pupil.name + "'s phone is " + pupil.phone + " and their address is " + pupil.address + "." + "\n"+pupil .rank);

Я предлагаю использовать методы getter и setter и использовать их, чтобы сделать ваши поля приватными. Вы можете прочитать подробнее о методах установки и получения краткий пример:

public class Person {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name =name;
//get name parameter and set it to this class'sname parameter }

И последнее, но не менее важное. Я рекомендую прочитать о этом ключевом слове .

...