所以我是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;
}
}
}
答案 0 :(得分:2)
有四种类型的java访问修饰符:
private
default //when no access modifier is specified
protected
public
现在让我们通过一个简单的表来理解访问修饰符:
基本上,访问修饰符确定是否可以直接访问数据成员,方法,构造函数或类。无论您选择哪种访问修饰符,它们仍然可以被修改。为了更好地理解,我建议您阅读封装。这将为您提供一个很好的示例,说明存在访问修饰符的原因。
答案 1 :(得分:0)
这里Employee类是内部类因此私有字段是可访问的,即使它们是私有的,因为内部类本身属于外部类。
如果类Employee在MainActivity类之外,那么没有getter或setter就不能直接访问私有字段
java文件中只有一个类可以是公共的,文件名应该与具有公共访问权的类相同。在这里,您可以将MainActivity和Employee指定为公共,因为Employee嵌套在MainActivity中。
因此,MainActivity在此处仅被视为课程。
如果您想将Employee类放在MainActivity之外
然后将公共访问修饰符更改为默认i,删除Employee类上的访问修饰符。把它放在外面。
或者您可以为Employee类创建不同的文件,您可以在其中为其提供公共可访问性,文件名将为Employee.java
现在sal将无法像MainActivity中的John.salary那样访问