最初に
Java Silver 勉強のメモを記していきたいと思います。
間違いなどありましたら教えていただけると幸いです。
随時更新していきます。
同名のローカル変数とフィールドがある場合
同名のローカル変数とフィールドがある場合、this を使ってフィールドであることを明記しないとローカル変数が優先されます、
そのため下記では test メソッドを実行しても num フィールドの値は変更されません。
public class Main {
private static int num;
// static初期化子
static {
num = 10;
}
static {
num = 20;
}
static void test(int num) {
num = num * num; // ここで参照しているnumは引数のnum
}
public static void main(String[] args) {
test(num);
System.out.println(num); // 20
}
}
アクセス修飾子について
修飾子 | 説明 |
---|---|
public | すべてのクラスからアクセス可能 |
protected | 同じパッケージに属するか、継承しているサブクラスからのみアクセス可能 |
なし(デフォルト) | 同じパッケージに属するクラスからのみアクセス可能 |
private | クラスないからのみアクセス可能 |
protectedとなしでは同じパッケージに属するクラスからのアクセスを受け付ける点では同じですが、スーパークラスとは別のパッケージに属するサブクラスからのアクセスについては異なります。
protectedは異なるパッケージに属するサブクラスからアクセスできますが、アクセス修飾子なしではサブクラスであっても別パッケージに属するクラスからはアクセスできません。