public class ClassN {
    public static void main(String[] args) {
        Person[] persons = { new Person(), new Person(), new Person()};

        persons[0].setData("Oshima", 30);
        persons[1].setData("Murakami", 30);
        persons[2].setData("Kurosawa", 32);

        for (int i = 0; i < persons.length; i++) {
            persons[i].introduce();
        }

        System.out.println();

        persons[0].compare(persons[1]);
        persons[1].compare(persons[2]);
        persons[2].compare(persons[1]);
    }

    class Person {
        private String name;
        private int age;


        public void setData(String pname, int page) {
            name = pname;
            age = page;
        }

        public int getAge() {
            return age;
        }

        public String getName() {
            return name;
        }

        public void introduce() {
            System.out.println("I am" + name + " and I am " + age + "years old.");
        }

        public void compare(Person person) {
            if (age == person.getAge()) {
                System.out.println(name + "and" + person.getName() + "are same old.");
            } else if (age < person.getAge()) {
                System.out.println(name + "is younger than " + person.getAge() + "for" + (person.getAge() - age) + "year");
            } else {
                System.out.println(name + "is older than " + person.getAge() + "for" + (age - person.getAge()) + "year");
            }

        }
    }
}

このコードを入れると
3行目のnew Person()の三つに
staticでない変数 thisをstaticコンテキストから参照することはできません
というエラーがでます。

サンプルコードを写経して、間違いないつもりなのですが間違っている箇所があるのでしょうか?
staticフィールドとインスタンスフィールドの違いは理解できているのではないかと思うのですが、staticフィールドを参照してる箇所が思いつかず、詰まっています。