メモ
これは?
public class A{ void hoge(){ System.out.println("A"); } } public class B extends A{ void hoge(){ System.out.println("B"); } } public class Test{ public static void main (String[] args){ B b = new B(); hoge(b); } public static void hoge(A a){ a.hoge(); } }
あれ、これの実行結果。
B
だよねぇ。
テキストを読み違えたか?
- オーバーライドしたメソッドの戻りは、サブクラスの型でもよい
- 共変戻り値?
- オーバーライド時にアクセスレベルをゆるくすることができる
- 例外の数を減らしたり、範囲を狭くすることができる
- 静的メソッドはオーバーライドできない
- サブクラスで再定義することはできる
- オーバーロード
- ダウンキャストの間違いはコンパイルを通過する
- A a = new B();
- B b = (B)a;
- これは実行時例外になる。
- charとintの互換性?
- superクラスのコンストラクタは暗黙的に呼び出される
- 引数付きコンストラクタを作成すると、引数なしコンストラクタをコンパイラは作成しない
- supre()かthis()は最初に書く
- スーパーコンストラクタ実行時に、static変数は利用できる
- コンストラクタをメソッドから呼び出すことはできない(コンストラクタからのみ呼び出すことができる)
- デフォルトコンストラクタのアクセス修飾子はクラスと同じ
- staticメソッドはインスタンス変数にアクセスできない