規約
- 識別子、キーワード
- JavaBean命名規則
- クラス
- インターフェース
- アクセス修飾子
- メソッド
・識別子の先頭に数字は使えない。_と$はOK
・識別子には文字数の制限がない
・大文字、小文字は区別される。(例)valueとValueは別物
・キーワードは識別子として使えない
・goto,assert,volatile,enum,throws,throw,final,finallyなどはキーワード
・signed,unsignedはキーワードではない
・クラス名:Dog (名詞)
・インターフェース名:Runnable (形容詞)
・メソッド:getValue(動詞+名詞)
・変数:buttonWidth
・定数:MIN_HEIGHT(大文字+_)
・publicなクラスは1ファイルに1つだけ
・publicでないクラスは複数定義可能
・publicクラスとファイル名を同じにする
・コメントは任意の行の先頭or末尾に記述できる
・import文とpackage文はそのファイル内の全てのクラスに適用される
・publicなクラスは全てのパッケージの全てのクラスからアクセスできる。
但し、別パッケージからアクセスする場合はimportする必要がある
・デフォルトアクセスのクラス(public指定なしのクラス)は同じパッケージ内のクラスからしかアクセスできない
・final宣言したクラスはサブクラス化できない→オブジェクト指向の重要な利点である拡張性を失う
・abstractで宣言してクラスを抽象クラスと呼ぶ
・抽象クラスはインスタンス化できない→拡張(サブクラス化)して使う
・メソッドに一つでもabstractを宣言した場合、クラスをabstract宣言しないといけない
・逆にabstractで宣言したクラスに抽象メソッドが無くても問題ない
・インターフェースには抽象メソッドしか定義できない
・インターフェースの全てのメソッドは暗黙的にpublicでabstract(下記は同じ)
void bounce();
public abstract void bounce();
・インターフェースの全ての変数は暗黙的にpublicでstaticでfinal(下記は同じ)
int HOGE = 1;
public static final int HOGE = 1;
・インターフェースのメソッドにはstatic, final, strictfp, nativeのいずれも指定できない
・他の複数のインターフェースを拡張(extends)できる
・インターフェース以外は拡張(extends)できない
・抽象クラスの最初の具象サブクラスは、全ての抽象メソッドを実装しなければならない
→オーバーロードとなる問題に注意。引数が違う場合は”実装”とみなされずオーバーロード扱いとなりコンパイルエラーとなる
・アクセス修飾子にはpublic, protected, デフォルト(指定なし), privateの4種類がある
・privateで宣言されたメンバーはサブクラスには継承できない。但し同じ名前で宣言できる
→サブクラスからは完全に見えないために、別物となる
・デフォルトメンバーにアクセスできるのは、同じパッケージ内のクラスからのみ
・protectedメンバーにアクセスできるのは、同じパッケージ内のクラス+サブクラス
→親子で別パッケージの場合、インスタンス化した場合は親のprotectedメンバーにアクセスできない(直接ならアクセス可能)
→つまりパッケージの外部にあるサブクラスからは継承を介さなければprotectedメンバーにアクセスできない
・デフォルトメンバーの場合は親と同じパッケージでないとアクセスできない
・ローカル変数(メソッド内変数)にはfinalしか指定できない
・abstract宣言されたメソッドは中括弧ではなくセミコロンで終わる
abstract void methodA();
・final宣言されたメソッドはオーバーライドできない
・private宣言されたメソッドは別物扱いとなるためコンパイルエラーとならない
・可変長引数リスト 0個以上のパラメータを受け取る
正
void method(int... foo){}
void method(char c, int... foo){}
誤
void method(int foo...){}
void method(int... a, int... b){}
void method(int... foo, char c){}