Java - 标记为private的字段仍可在主函数中更改?

时间:2017-03-13 14:57:16

标签: java android android-studio

所以我是Java的新手,也是学习访问修饰符的人。我了解到,如果将字段声明为私有,则只能使用get和set方法更改并读取它(从其他类中读取)。对于父类来说这不是真的吗?因为它似乎仍然可以在main()中更改。

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final TextView txt = (TextView) findViewById(R.id.txt);
    Button btn = (Button) findViewById(R.id.btn);


    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Employee John = new Employee(01, "John", "Smith", 20000);
            John.salary = 20;
            txt.setText("ID : " + John.id + "\nName : " + John.name + "\nSalary : " + John.salary);

        }
    });
}

public class Employee{
    int id;
    String name;
    String last_name;
    private int salary;

    public Employee(int id, String name, String last_name, int salary) {
        this.id = id;
        this.name = name;
        this.last_name = last_name;
        this.salary = salary;
    }
}


}

2 个答案:

答案 0 :(得分:2)

有四种类型的java访问修饰符:

private
default //when no access modifier is specified
protected
public

现在让我们通过一个简单的表来理解访问修饰符:

enter image description here

基本上,访问修饰符确定是否可以直接访问数据成员,方法,构造函数或类。无论您选择哪种访问修饰符,它们仍然可以被修改。为了更好地理解,我建议您阅读封装。这将为您提供一个很好的示例,说明存在访问修饰符的原因。

答案 1 :(得分:0)

这里Employee类是内部类因此私有字段是可访问的,即使它们是私有的,因为内部类本身属于外部类。

如果类Employee在MainActivity类之外,那么没有getter或setter就不能直接访问私有字段

java文件中只有一个类可以是公共的,文件名应该与具有公共访问权的类相同。在这里,您可以将MainActivity和Employee指定为公共,因为Employee嵌套在MainActivity中。

因此,MainActivity在此处仅被视为课程。

如果您想将Employee类放在MainActivity之外

然后将公共访问修饰符更改为默认i,删除Employee类上的访问修饰符。把它放在外面。

或者您可以为Employee类创建不同的文件,您可以在其中为其提供公共可访问性,文件名将为Employee.java

现在sal将无法像MainActivity中的John.salary那样访问