オブジェクト指向に置いて、インスタンス化すれば、そのクラスの変数やメソッド全てを使用できるわけではありません。
設定によっては参照できなくることも可能です
アクセス修飾子を設定する理由
理由は「他の誰か(主に、同じ職場の人、引き継いだ人)が想定外の使用をするのを避けるため」などです。
Javaのスコープの定義
スコープ名 |
参照範囲 |
public |
インスタンス化さえすればどのクラスからでも使用可能 |
protected |
サブクラス、子クラスのみ使用可能 |
未設定 |
同じパッケージ内なら使用可能 |
private |
他のクラスでは使用不可 |
|
public |
protcted |
未設定 |
private |
同じクラス内 |
○ |
○ |
○ |
○ |
同じパッケージ |
○ |
○ |
○ |
× |
サブクラス、子クラス |
○ |
○ |
× |
× |
他クラス(インスタンス化したオブジェクト) |
○ |
× |
× |
× |
public class Sample extends ProgramMemoExample {
public static void main(String[] args) {
Test1 test1 = new Test1();
test1.homework1();
// パッケージが違うためエラーになる。
test1.homework2();
// publicなので使える
System.out.println(test1.publicElement);
// パッケージが違うためエラーになる。
System.out.println(test1.defaultElement);
// 親クラスにTest1を設定してもパッケージが違うとエラーになる。
System.out.println(test1.protectedElement);
// 他クラスなので使えない
System.out.println(test1.secret);
ProgramMemoExample memo = new ProgramMemoExample(10);
// 親クラスなので使用可能
memo.protectedEmelent = 0;
}
}
//クラス定義の例
public class ProgramMemoExample {
// 定数定義の例、そして、スネークケースの例
final int MAX_LENGTH = 10;
// メンバ変数の例、そしてパスカルケースの例
public int memoCount = 0;
boolean isUsed = true;
protected int protectedEmelent = -1;
private String title = "開発メモの例題";
ProgramMemoExample() {
System.out.println("コンストラクタ引数なし");
// メソッドの呼び出しの例
this.initMemberVariable();
}
ProgramMemoExample(int x) {
System.out.println("コンストラクタ引数あり"+x);
// メソッドの呼び出しの例
this.initMemberVariable();
}
// メソッドの定義の例
void initMemberVariable() {
int flag = -1;
// メソッドの処理の例
this.memoCount = 0;
this.isUsed = false;
flag = this.switchIsUsed(!this.isUsed);
}
// 引数、返り値があるメソッド定義の例
int switchIsUsed(boolean isOn) {
this.isUsed = isOn;
return 0;
}
}
package homeWork;
// 違うパッケージのクラス
public class Test1 {
public int publicElement = 0;
int defaultElement = 1;
protected double protectedElement = 2;
private String secret = "内緒";
public void homework1() {
int x = 10;
System.out.println("homework1問1");
System.out.println("x = " + x);
}
protected void homework2() {
System.out.println("homework2");
// 同じクラスなのでsecretは使える
System.out.println(secret);
}
}