2017-03-13 4 views
0

私はJavaを初めて使い、アクセス修飾子を学んでいます。プライベートフィールドを宣言すると、getメソッドとsetメソッドを使用してフィールドを変更して読み取ることができます(別のクラスから)。親クラスではこれは当てはまりませんか?なぜなら、それはmain()でまだ変更することができるからです。Java - プライベートとラベル付けされたフィールドは、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

ありがとう!私はちょうど私が別のクラスファイルを作成し、そこから参照した場合、それがプライベートであれば動作しないことに気づいた。 – IM2607

+0

あなたのコード例は親クラスを表示せず、サブクラスまたはスーパークラスの 'private'フィールドの変更を表示せず、' main'メソッドも表示しません。だからあなたが頼んだことのどれもが例にはありません。それは人々があなたを助けることを少し難しくします、あなたは知っています。 –

答えて

2

Javaのアクセス修飾子の4種類があります

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

は、今度は、単純なテーブルでアクセス修飾子を理解してみましょう:

enter image description here

データあれば基本的にはアクセス修飾子が決定メンバ、メソッド、コンストラクタ、またはクラスに直接アクセスすることができます。選択したアクセス修飾子に関係なく、それらは変更できます。理解を深めるために、封筒についてお読みになることをお勧めします。これにより、アクセス修飾子が存在する理由の良い例が得られます。

+0

'default'はアクセス修飾子ではありません。 –

+0

デフォルトはあなたが**アクセス修飾子を指定しない**です。 – DustyMan

+0

あなたの答えが言うことではありません。 –

0

ここで、Employeeクラスは内部クラスです。したがって、内部クラス自体が外部クラスに属しているため、プライベートフィールドはプライベートでもアクセスできます。クラスの従業員は、javaファイル内MainActivityクラス

つだけのクラスは、公開することができ、ファイルの名前が同じでなければなりません外だった場合

プライベートフィールドは、ゲッターやセッターせずに直接アクセスされていません公共のアクセス権を持つクラス。ここでは、MainActivity内にEmployeeがネストされているため、MainActivityとEmployeeの両方をpublicとして指定できます。

したがって、MainActivityはここではクラスとしてのみ考慮されます。

あなたはMainActivity

外Employeeクラスを入れたい場合は、eは、Employeeクラスのアクセス修飾子を削除して、私をデフォルトにパブリックアクセス修飾子を変更します。それを外に出してください。

それとも、あなたはそれが公共のアクセシビリティとファイル名はEmployee.java

になります与えることができ、Employeeクラスのために別のファイルを作成することができます

今SALは文句を言わないMainActivityにJohn.salaryのようにアクセスできるようになります

関連する問題