抽象クラスの配列の宣言の仕方が分かりません


Personという抽象クラスの配列を用意しましたが、Exception in thread "main"
java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length
0というエラーで実行できません。  
Personは人の名前と所持金を保持します。

[code]

    abstract class Person{
        protected String names;
        protected int moneys;
    
        public Person(String name, int money){
            names = name;
            moneys = money;
        }
    
        void getName(){
            System.out.println("name:"+names);
        }
    
        void getMoney(){
            System.out.println("money:"+moneys);
        }
    
        void changeMoney(int used_money){
            moneys = moneys - used_money;
            if(moneys < 0){
                System.out.println("error:money cannot be less than 0");
            }
        } 
    
        void print(){
            System.out.println(names+" now has "+moneys+" yen");
        }
    
        abstract int getFee();
    
    }
    
[/code]

以下はバスの乗車時にお金を払えなかったら、人数がいっぱいだったら乗れないというようなコードです。見てほしいところは**をつけているvoid
getOn()のpassengers[pass_num++] = person;です。ここでエラーがでます。

[code]

    public class Bus extends Car{
        private static int pass_num = 1;
        private int pass_max;
        private static int fee_sum = 0;
    
        public Bus(int x){
            pass_max = x;
        }
    
        Person passengers[] = new Person[pass_max];
    
        int getBusNum(){
            return super.num;
        }
    
        void getOn(Person person){
            int fee = person.getFee();
            fee_sum += fee;
            if(person.moneys - fee >= 0 && pass_num < pass_max){
                person.moneys -= fee;
                *passengers[pass_num++] = person;*
                person.getName();
                person.getMoney();
            }else{
                System.out.println(person.names+" could not get on the bus");
    
            }
        }
    
        void getOff(Person pass){
            int k;
            int flag = 0;
            for(k=0;k<pass_num;k++){
                if((pass.names).equals(passengers[k])){
                    System.out.println(pass.names+" got off the bus");
                    passengers[k].names = "";
                    passengers[k].moneys = -1;
                    flag = 1;
                    break;
                }
            }
            if(flag == 0){
                System.out.println(pass.names+" was not on the bus");
            }
            flag = 0;
        }
    
        void printAllPassengers(){
            for(int j=0;j>pass_max;j++){
                if(passengers[j].moneys != -1){
                    System.out.println("name: "+passengers[j].names);
                }
            }
        }
    
        void printTotalFee(){
            System.out.println("sum of fee: "+fee_sum);
        }
    
    }
    
[/code]

またPersonクラスにはサブクラスがあり、このようになっています。

[code]

    public class Adult extends Person{
        int getFee(){
            return 200;
        }
        public Adult(String name, int money){
            super(name, money);
        }
    }
    
[/code]

似たようなクラスにChild, Seniorがあります。

調べてみた結果、passengerがNULLになっているとかPersonオブジェクトと結びついていないと色々考えましたが分かりませんでした。ご教授お願いします。

最後に、勉強を初めてまもないのでコードの稚拙さやプログラムしたい内容とかみ合っていないなど、指摘する点は多いと思いますがご容赦ください。




全体がよく見えてこないので、これだけで問題が解消するのか不明ですが……

[code]

    public Bus(int x){
        pass_max = x;
    }
    
    Person passengers[] = new Person[pass_max];
    
[/code]

ここを

[code]

    public Bus(int x){
        pass_max = x;
        passengers[] = new Person[pass_max];
    }
    
    Person passengers[];
    
[/code]

としてみたらどうでしょうか？

`java.lang.ArrayIndexOutOfBoundsException` については解消できるかもしれません。

