Java bronze -継承とポリモーフィズム-
テスト
ビューア設定
[Enter]で回答、[Shift + Enter]で改行します。キーボードショートカットテスト結果は全て回答すると保存されます。
-
サブクラスのインスタンス
サブクラスのインスタンスはスーパークラスの定義の上にサブクラスの差分を載せたものがサブクラスのインスタンスになる。インスタンス生成時はスーパークラスのインスタンスと差分のインスタンスの2つを結合し、生成する。
-
サブクラスのインスタンスが継承できないもの
コンストラクタ、privateなフィールドやメソッド
-
コンストラクタチェーンとは
サブクラスのコンストラクタがスーパークラスのコンストラクタを呼び出すこと。このとき呼び出されるのは、引数なしのスーパークラスのコンストラクタである。
-
コンストラクタの呼び出し順序
コンストラクタ内で同クラスの他のコンストラクタを呼び出す際には、必ずコンストラクタブロックの先頭行に記述が必要。従ってthisとsuperを同一コンストラクタ内に記述する場合、super→thisの順序はコンパイルエラーとなる
-
メソッドのオーバーライドが成り立つ条件
メソッドのシグニチャがスーパークラスと同一、戻り値の型がスーパークラスのメソッドと同一か、メソッドのアクセス制御がスーパークラスと同じか、それよりも緩い
-
オーバーライドしたメソッドのthrow節のルール
オーバーライドしているメソッドはthrows節を持たなくてもよい、もし持つのであればオーバライドしたメソッドに列挙されている例外の型が、スーパークラスのメソッドに列挙されている例外と同じ型かそのサブタイプであること
-
インタフェースに定義するフィールドの修飾子
public, static, finalの3つ。インタフェースに定義するフィールドはコンパイラによって暗黙的にこの3つで修飾される。
-
インタフェースに定義できる2点
インタフェースに定義できるの定数フィールドと抽象メソッドのみ。抽象メソッドは情報隠蔽のうち公開部分をインタフェースとして定めるため、publicが必須。具体的な処理を持たないメソッドは、具体的な処理を持つメソッドと区別するためにもabstractで修飾が必要。
-
インタフェースの特徴
具象メソッドは定義できない、クラスはインタフェースを多重実現できる、インタフェースは既存インタフェースを継承可能かつ多重継承可能
-
抽象クラスの特徴
抽象クラスはクラスとインタフェース両方の性質を持ったクラス。インスタンス化不可。抽象クラスに定義したメソッドは抽象クラスを継承する具象クラスが実装、抽象クラスに定義するメソッドはabstractで修飾しないとコンパイルエラーになる。
-
変数のアップキャストとダウンキャスト
変数を実現関係や継承関係にある上位の型に変換することをアップキャスト、下位の型に変換することをダウンキャストという。コンパイラはポリモーフィズムにより互換性のある型であるか否かを確認し、互換性があると判断すれば自動的にアップキャストする機能がある。一方、ダウンキャストは自動的に行われない。スーパークラスにはサブクラスのような差分の定義がないため、互換性がなくコンパイルエラーとなる。
-
パッケージが提供する機能
名前空間を提供し、名前の衝突を避ける、アクセス修飾子と組み合わせてアクセス制御機能を提供する、クラスの分類を可能にする。
-
インポート宣言
同一パッケージに所属するクラスはインポート宣言を省略可能、java.langパッケージに所属するクラスはインポート宣言を省略可能(頻繁に利用するため)
-
オーバーロードしたコンストラクタの呼び出し
オーバーロードしたコンストラクタの呼び出しにはthis()を使う。this()はコンストラクタブロックの先頭行でのみ使用可能。
-
サブクラスのインスタンスがスーパークラスから引き継げないもの
①コンストラクタ、②privateなフィールドやメソッド
-
スーパークラスの要素と同じ名前で定義できるサブクラスの要素
フィールド、メソッド。※コンストラクタはメソッドではあるが定義不可
-
例外を投げる際のオーバーライド
例外を投げるメソッド(例:メソッド名 throws ~Exception、~~Exception)をオーバーライドする際、メソッド名 throws Exceptionでまとめられる。
-
ポリモーフィズムにおける型変換のルール
2つのクラスには継承関係が必須。
-
オーバーライドのアノテーションについて
親子クラスでメソッドのシグネチャが同一の場合において子クラスに@Overrideが無い場合、メソッドはオーバーライドされず各親子クラスに同一のメソッドが存在することになる。
-
コンストラクタ呼び出しにおけるsuperとthisの併用
サブクラスのコンストラクタ内でsuperとthisの併用したコンストラクタの呼び出しは不可。superやthisはコンストラクタ内の先頭行に記述が必須なので、コンストラクタ呼び出し時は重複も不可
-