java - 无法访问 Person 类型的封闭实例

标签 java

我想知道是否有人可以告诉我为什么我在第 175 行收到错误

Student george= new Student("George Flintstone", 21, "Politics", 3.1);

这表示没有可访问的 person 类型的封闭实例。我浏览过其他类似的问题,但我对java不太熟悉,所以我没有真正找到答案,至少是我足够理解的答案。这是我的 java 入门课的作业。我没有在常见问题解答中看到任何内容说我不能寻求家庭作业方面的帮助,但我承认我没有仔细阅读它,所以如果我违反了某些规则或其他规则,请告诉我。

另外,很抱歉发布了这么多代码,我不确定其中的哪些部分可能很重要。

Public class Person {

    String name;
    int age;

    public Person(String n, int a)
    {
        name = n;
        age = a;
    }

    public Person()
    {
        name = "Bob";
        age = 24; 
    }

    public void set_Person(String n)
    {
        name = n;
    }

    public void set_Person(int a)
    {
        age = a;
    }

    public void set_Person(String n, int a)
    {
        name = n;
        age = a;
    }

    public String get_Name()
    {
        return name;
    }

    public int get_Age()
    {
        return age;
    }

    public boolean equals(Object ob)
    {
        Person p = (Person)ob;
        if(ob == null)
            return false;
        if(name.equals(p.name) && age == p.age)
            return true;
        else
            return false;
    }

    public String toString()
    {
        String temp = name + " is " + age + " years old ";
        return temp;
    }

class Student {

    String major;
    double gpa;
    Person p = new Person();

    Student(String n, int a, String m, double g )
    {
        p.set_Person(n,a);
        major = m;
        gpa = g;
    }

    Student()
    {
        p.set_Person("Ben", 10);
        major = "compsci";
        gpa = 3.5;
    }

    public void set_Student(String n, int a, String m, double g)
    {
        p.set_Person(n,a);
        major = m;
        gpa = g;
    }

    public void set_Student(String n)
    {
        p.set_Person(n);
    }

    public void set_Student(int a)
    {
        p.set_Person(a);
    }

    public String getStudentName()
    {
        String temp = p.get_Name();
        return temp;
    }

    public int getStudentAge()
    {
        return p.get_Age();
    }


}

class Family {


    Person [] per_array;
    int person_count = 0;
    Person temp = new Person();

    Family(int members)
    {
        Person[] per_array = new Person[members];
    }

    public void addPerson(Person p)
    {
        boolean check = false;

        for(int count = 0; count < per_array.length; count++){
            if(per_array[count].equals(p))
            {
                System.out.println("That person is already a member of this family");
                check = true;
            }
        }
        if(check = false){
            per_array[person_count] = p;
            person_count++;
        }
    }

    public void addPerson(Student s)
    {
        temp.set_Person(s.getStudentName(), s.getStudentAge());
        boolean check = false;

        for(int count = 0; count < per_array.length; count++){
            if(per_array[count].equals(temp))
            {
                System.out.println("That person is already a member of this family");
                check = true;
            }
        }

        if(check = false){
            per_array[person_count] = temp;
            person_count++;
        }

    }

    public void printOutFamily()
    {
        for(int count = 0; count < per_array.length; count++)
        {
            per_array[count].toString();
        }
    }
}

    public static void main(String[] args) {
        Person fred= new Person("Fred Flintstone", 50);
        System.out.println("created " + fred);

        Person wilma = new Person("Wilma Flintstone", 48);
        Student george= new Student("George Flintstone", 21, "Politics", 3.1);
        System.out.println("created " + george);

        Student sue= new Student("Sue Flintstone", 24, "Nursing", 3.3);
        Student anotherGeorge= new Student("George Flintstone", 21, "Math", 3.4);
        Person yetAnotherGeorge= new Person("George Flintstone", 21);

        Family f = new Family(10);
        f.addPerson(fred);
        f.addPerson(wilma);
        f.addPerson(george);
        f.addPerson(sue);
        f.addPerson(anotherGeorge);
        f.addPerson(yetAnotherGeorge);

        anotherGeorge.set_Student("Georgie Flintstone");
        f.addPerson(anotherGeorge);

        f.printOutFamily();
    }

}

最佳答案

Student 是一个内部类,与 Person 的特定实例关联,这意味着调用是无效的

new Student("George Flintstone", 21, "Math", 3.4);*

使内部类静态将允许它工作。静态内部类(也称为嵌套类)不需要外部类(此处为 Person)的实例。

关于java - 无法访问 Person 类型的封闭实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15915769/

相关文章:

java - 从 Java SWT 中的事件处理程序访问小部件

c# - 有没有办法在 SQL 数据库中搜索相似词(意思是不相同的词)?

Java : file exists Vs searching large xml db

java - 无法将减号插入具有检查约束的 varchar 列(列 <> '' )

java - Java进程什么时候在shutdown hook后终止?

java - 如何在 Google map 上的标记上方添加文本?

java - JLabels setPreferredSize 更改所有 JLabel 的大小,而不仅仅是一个?

java - 将 API 与其实现分离

java - 需要 Java 中的线程安全 MessageDigest

java - 注释异常 : Use of @OneToMany or @ManyToMany targeting an unmapped class: