ショートサーキット評価
論理AND演算(両方の変数が真の場合のみ結果が真)を行う際、最初の変数が偽であると判断された場合、後続の変数の評価は完全にスキップされます。
例:
boolean result = (value < 4) && (value++ < 4);
System.out.println(result);
System.out.println(value);
出力結果:
false
5
文字列連結演算子 +
int x = 10; int y = 20 の場合
System.out.println("" + x + y); の出力結果は "1020" となります
System.out.println(x + y + ""); の出力結果は "30" となります
これにより、出力時に空文字列の後に続く値はすべて文字列に変換されることがわかります。
superキーワード
使用上の注意点:
- superで親クラスのコンストラクタを呼び出す場合は、必ずコンストラクタの最初の行に記述する必要があります
- superはサブクラスのメソッドまたはコンストラク内でのみ使用できます
- superとthisは同時にコンストラクタを呼び出すことはできません
super VS this
-
表すオブジェクトが異なります: this: このオブジェクト自体を指します super: 親クラスオブジェクトへの参照を表します
-
前提条件: this: 継承関係なく使用できます super: 継承関係がある場合にのみ使用できます
-
コンストラクタ: this(): 同じクラスのコンストラクタを呼び出します super(): 親クラスのコンストラクタを呼び出します
staticキーワード
public class Main {
public static void main(String[] args) {
FirstClass first = new FirstClass();
first.showMessage();
// 親クラスの参照がサブクラスを指している
SecondClass second = new FirstClass();
second.showMessage();
}
}
// オーバーライドはメソッドに関するもので、プロパティとは関係ありません
public class SecondClass {
public static void showMessage(){
System.out.println("SecondClass=>showMessage");
}
}
public class FirstClass extends SecondClass{
public static void showMessage(){
System.out.println("FirstClass=>showMessage");
}
}
staticがある場合、secondはSecondClassで定義された変数なのでSecondClassのメソッドが呼び出されます
そのため出力結果は:
FirstClass=>showMessage
SecondClass=>showMessage
staticがない場合、secondはオブジェクトのメソッドを呼び出し、secondはFirstClassでnewされたオブジェクトです
そのため出力結果は:
FirstClass=>showMessage
FirstClass=>showMessage
静的メソッドはクラスのメソッドであり、非静的メソッドはオブジェクトのメソッドであるため、secondはFirstClassで生成されたオブジェクトなのでFirstClassのメソッドが呼び出されます
メソッドのオーバーライド
継承関係が必要で、サブクラスが親クラスのメソッドを再定義します!
-
メソッド名は同じでなければなりません
-
パラメータリストは同一でなければなりません
-
修飾子:アクセス範囲は拡大できますが縮小することはできません:public > Protected > Default > private
-
例外のスロー:範囲は縮小できますが拡大することはできません;ClassNotFoundException → Exception(より広い)
オーバーライドでは、サブクラスのメソッドは親クラスのメソッドとシグネチャが一致する必要がありますが、メソッド本体は異なります!
なぜオーバーライドが必要なのか:
- 親クラスの機能が、サブクラスでは必要ない場合があるか、または要件を満たしていない場合!
ショートカット:Alt + Insert ; override;
ポリモーフィズムの注意点:
- ポリモーフィズムはメソッドに関するもので、プロパティにはポリモーフィズムは存在しません
- 親クラスとサブクラスの間に型変換の不整合があると例外が発生します!ClassCastException!
- 存在条件:継承関係、メソッドのオーバーライド、親クラスの参照がサブクラスのオブジェクトを指している! Parent parent = new Child();
- staticメソッドはクラスに属し、インスタンスには属さない
- final定数
- privateメソッド