🐞 アクセス制御
クラスやメンバーへの可視性をコントロールする「アクセス制御」の考え方は次のとおりです。
(公開範囲が広い) public => どのクラスからでも利用可能 ↓ protected => このクラスを継承したサブクラス、もしくは同一パッケージ内のクラスから利用できる ↓ デフォルト(指定なし) => 同一パッケージ内のクラスからのみ利用可能 ↓ private => 同一クラス内からのみ利用可能 (公開範囲が狭い)
|
protected
は継承したサブクラスからもアクセスできるが、デフォルトはアクセスできないので注意。
アクセス制御の使い分け
- フィールドは原則としてprivate。ただしクラスの用途によってはpublicも許容
- 特定のクラスで使う下請け処理メソッドはprivateに。継承先で使うならprotectedに
- パッケージ内でほかから呼ぶメソッドはパッケージ可視、パッケージ外ならpublicに
- カプセル化(関心を1ヵ所にまとめて外から隠すことで変わらない部分を増やす)は重要
同一クラスの他オブジェクトに注意
同一クラスの他オブジェクトのprivateフィールドはアクセスできるので注意。
public class Sample { private final String title; Sample(String title) { this.title = title; } void exec(Sample sample) { System.out.println(sample.title); }
public static void main(String... args) { Sample object1 = new Sample(title1); Sample object2 = new Sample(title2); object2.exec(object1); } }
|
🍮 クラス宣言の修飾子
修飾子 |
意味 |
public |
グローバル可視。書かないとパッケージ可視となります |
final |
拡張による継承を禁止します |
abstract |
抽象クラス(直接インスタンス化できないクラス)となります |
strictftp |
クラス内に記述した浮動小数点の演算を厳密に評価 |
🐮 フィールド宣言の修飾子
修飾子 |
意味 |
public |
アクセス制御 |
protected |
アクセス制御 |
private |
アクセス制御 |
final |
フィールド変数への再代入を禁止 |
static |
クラスフィールド |
volatile |
スレッド間での変数の値を同期 |
🐰 メソッド宣言の修飾子
修飾子 |
意味 |
public |
アクセス制御 |
protected |
アクセス制御 |
private |
アクセス制御 |
abstract |
抽象メソッド |
final |
オーバーライド不可 |
static |
クラスメソッド |
synchronized |
同期のためのロック獲得 |
strictftp |
浮動小数点の演算を厳密に評価 |
🎳 変数にfinalをつけると再代入不可
final
を変数に付与した場合、再代入ができなくなります。(読み込み専用ではない)
final StringBuilder sb1 = new StringBuilder("012"); sb1 = new StringBuilder("345");
final StringBuilder sb2 = new StringBuilder("012"); sb2.append("345");
|
👽 参考リンク
🖥 VULTRおすすめ
「VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。
最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!