親クラスのメンバー(フィールド、メソッド†)が子クラスから
アクセスできる†かどうかの判断について記します。
アクセスできる†かどうかの判断について記します。
- 1.4つの「アクセス修飾子」
-
- public
- protect
- 空白(何もつけない)
- private
- 識別子:
- public
- protected
- 空白
- private
- 公開範囲:
- 広い
- >
- >
- 狭い
覚え方は「ぱぶ(pub)/ぷろ(pro)/でふぉ(def)/ぷり(pri)」で(順番が重要)。 - 2.「アクセス修飾子」の意味を覚える
-
- public
-
他のクラスからアクセスできる
public int num3; // public修飾子を付ける
-
- protected
-
子クラスからアクセスできる
protected int num2; // protected修飾子を付ける
-
- 空白(何もつけない)
-
同じパッケージ内の子クラスからのみアクセスできる
int num1; // まったく修飾子を付けない
-
- private
-
そのクラス内でのみアクセスできる
他のクラスから見えないprivate int num; // private修飾子を付ける
- 3.使用例1 ー 別のクラスからの参照
-
ファイル:Super.java
package smplepkg; //サンプルパッケージ public class Super { private int num; int num1; protected int num2; public int num3; public int getNum() { return this.num; } public void setNum(int n) { this.num = n; } }
ファイル:Sub.java
import smplepkg.*; //サンプルパッケージのクラスをインポート class Sub extends Super { Sub() { //System.out.println(num); // numはprivateなので見えない //System.out.println(num1); // numはデフォルトなので他のパッケージからは見えない System.out.println(num2); // num2はprotectなのでSuperを継承しているため見える System.out.println(num3); // num3はpublicなので無条件に見える } }
SuperクラスとSubクラスが別のパッケージの場合です。
ファイルSub.javaの先頭でsamplepkg.Superをインポートしていますが
Subクラスはsamplepkgには属していません。
なぜなら、ファイル冒頭で以下のパッケージ宣言、package samplepkg;
が行われていないからです。
ファイル冒頭にpackage宣言がない場合、
そのファイルで宣言されているクラスは
デフォルトパッケージ(標準のパッケージ)に属していると判断されます。したがって、この場合、
samplepkgパッケージのSuperクラス
と
デフォルトパッケージのSubクラス
は別のパッケージに属していることになります。
ファイル冒頭のpackageに関する宣言は注意深く確認する必要があります。 - 4.使用例2 ー 同じクラスからの参照
-
ファイル:Super.java
3.と同じ ...
ファイル:Sub.java
package smplepkg; // (1) class Sub extends Super { Sub() { //System.out.println(num); // numはprivateなので見えない System.out.println(num1); // num1はデフォルトなので同じパッケージからは見える System.out.println(num2); // num2はprotectなので同じパッケージからは見える System.out.println(num3); // num3はpublicなので無条件に見える } }
SuperクラスとSubクラスが同じパッケージの場合です。
今回はファイルSub.javaの先頭で以下のパッケージ宣言、package samplepkg;
が行われています。 行(1)
親クラスであるSuperクラスのメンバーnum1(アクセス属性がデフォルト)にアクセスが可能になりました。
†メンバーには他に「ネステッドクラス」などありますが本稿では割愛します。
†「アクセスが可能」などの表現については「継承している」「参照可能である」「見える」「可視/不可視」など、違った表現が用いられることがあります。
†「アクセスが可能」などの表現については「継承している」「参照可能である」「見える」「可視/不可視」など、違った表現が用いられることがあります。