Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java默认访问修饰符_Java_Default_Public - Fatal编程技术网

java默认访问修饰符

java默认访问修饰符,java,default,public,Java,Default,Public,我是java的完全初学者,如果这个问题不符合本网站的标准,请原谅我: class person{ String name; int age; } class teacher extends person{ person s1=new person(); teacher t1=new teacher(); t1.age=56; } 在这里,我试图访问可变的年龄和类名,为它们赋值给person,这恰好是person的超类。但是编译器给出了错误。我甚至尝试将name变量和

我是java的完全初学者,如果这个问题不符合本网站的标准,请原谅我:

class person{
    String name;
    int age;
}
class teacher extends person{
  person s1=new person();
  teacher t1=new teacher();
  t1.age=56;
}

在这里,我试图访问可变的年龄和类名,为它们赋值给person,这恰好是person的超类。但是编译器给出了错误。我甚至尝试将name变量和age变量公开。但编译器仍在报告错误。我想知道为什么我不能直接访问子类中的超类变量并给它们赋值。

不允许在类体中直接编写任意代码。与你所写内容最接近的是

class teacher extends person{
  person s1=new person();
  teacher t1=new teacher();
  {
    t1.age=56;
  }
}

这称为实例初始值设定项块。

实际上,您正在现有类体中对外部类的变量进行赋值,这是不合法的。请在方法或构造函数或匿名块中进行赋值

class person{
    String name;
    int age;
}
class teacher extends person{
    person s1=new person();
    teacher t1=new teacher();
    // t1.age=56; Error here
    public teacher()
    {
         t1.age=56;
    }
    //or method
    public void setAge()
    {
         t1.age=56;
    }
}

做任何适合你和你的程序的事情。

一般来说,直接访问变量不是一个好主意。考虑使用下面的代码。 测试驱动程序

package com.example.input;

public class TestPeople {

        public static void main(String[] args) {

            Person s1 = new Person();
            s1.setName("student 1").setAge(19);
            Teacher t1 = new Teacher("Dr. Fun",0);
            t1.setAge(56);

            System.out.println("Student " + s1.getName() + ", " + s1.getAge());
            System.out.println("Teacher  " + t1.getName() + ", " + t1.getAge());
        }

    }
package com.example.input;

public class Teacher extends Person {

    public Teacher() {
        super();
    }
    public Teacher(String aName, int anAge) {
        super(aName, anAge);
    }

}
班级人员

package com.example.input;

public class Person {
    private String name;
    private int age;

    public Person() {};
    public Person(String aName, int anAge) {
        setName(aName).setAge(anAge);
    }

    public String getName() {return name;}
    public int getAge() {return age;}

    public Person setName(String aName) { name = aName; return this;}
    public Person setAge(int anAge) { age = anAge; return this;}

}
班主任

package com.example.input;

public class TestPeople {

        public static void main(String[] args) {

            Person s1 = new Person();
            s1.setName("student 1").setAge(19);
            Teacher t1 = new Teacher("Dr. Fun",0);
            t1.setAge(56);

            System.out.println("Student " + s1.getName() + ", " + s1.getAge());
            System.out.println("Teacher  " + t1.getName() + ", " + t1.getAge());
        }

    }
package com.example.input;

public class Teacher extends Person {

    public Teacher() {
        super();
    }
    public Teacher(String aName, int anAge) {
        super(aName, anAge);
    }

}

你有什么错误?您正在使用方法外的代码(
t1.age=56;
)。好的,即使是初学者也应该能够正确地使用空格键…当编译器给出错误时,请始终将其包含在您的问题中。需要知道的一点是,在Java中,类名应该以大写字母开头,而字段,变量名和方法名使用小写字母。这不是编译器强制执行的规则,而是几乎每个Java开发人员都使用的命名约定。