Я создал класс Person, который расширен классами Student и Employee (который расширен другими классами типа Employee). Класс person выглядит так:

String name;
 int ssn;
 int age;
 String gender;
 String address;
 String PNumber;
 static int count;

//empty constructor
public Person(){
    count++;
}

//print count
public static void printCount(){
    System.out.println("The number of people is: "+ count);
}

//constructor with name
public Person(String name){
    this.name = name;
    count++;
}

/*constructor to create default person object*/
public Person(String name, int ssn, int age, String gender, String address, String PNumber)
{

    this.name = name;
    this.ssn = ssn;
    this.age = age;
    this.gender = gender;
    this.address = address;
    this.PNumber = PNumber;
    count++;
}

В настоящее время я пытаюсь создать метод, который будет отображать всех лиц, если их пол = "Мужской". У меня есть:

//display Males
public void print(String gender){ 
    if(this.gender.contentEquals(gender)){
        //print out person objects that meet this if statement
    }
}

Я не уверен, как ссылаться на объекты (студенты и сотрудники, которые все являются людьми) в методе, чтобы вернуть их. И я также не знаю, как ссылаться на этот метод в основном методе. Я не могу использовать Person.print, но если я использую

Person james = new Person(); 

А затем используйте

james.print("Males"); 

Я возвращаю только Джеймса (и этот метод не имеет смысла в этом контексте).

Любая помощь оценили.

0
Leo 13 Фев 2013 в 05:15

1 ответ

Лучший ответ

Во-первых, метод печати должен быть преобразован в статический метод. Он не зависит от каждого отдельного объекта Person, поэтому сделав его статическим, вы сможете вызывать его в основном методе как

Person.print("Male");

Чтобы ссылаться на объекты Person в методе печати, вам необходимо передать ему коллекцию объектов Person в качестве параметра. Вы должны сохранить все экземпляры Person в массиве и передать их в метод печати при его вызове. Тогда метод печати может быть

public static void print(String gender, Person[] people) {
    for(Person x : people)
        if (x.gender.equals(gender))
            //print the person
}

С этой модификацией вы должны вызывать его из основного метода как

Person.print("Male", people);

Где people - это массив, в котором вы храните все объекты Person.

1
tlent 13 Фев 2013 в 05:55
Огромное спасибо. У меня есть дополнительный комментарий / вопрос. Не могли бы вы объяснить (Человек x: люди)? Я немного новичок. Создает ли он экземпляр класса Person с именем people? В какой-то момент я также сделал метод печати статическим, но я не смог использовать пол, так как это не была статическая переменная.
 – 
Leo
13 Фев 2013 в 05:57
В любом случае, теперь я это умею. Еще раз большое спасибо
 – 
Leo
13 Фев 2013 в 05:58
1
Без проблем. for (Object variableName: collection) - альтернативный метод итерации по коллекции. В основном это означает, что для каждого экземпляра объекта (Person в вашей программе) в коллекции (люди) установите значение variableName, равное ему, и сделайте все, что находится в следующем блоке. Это называется циклом foreach, и вы можете прочитать, что, вероятно, лучше его объяснение здесь.
 – 
tlent
13 Фев 2013 в 06:08