ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
本稿は Java の継承に関する記事です。継承とは、既存のクラス (親クラス・スーパークラス) が持つフィールド・メソッドを、新しいクラス (子クラス・サブクラス) でそのまま引き継いで利用する仕組みです。共通ロジックを 1 箇所にまとめ、差分だけ子クラスに書く設計を可能にします。
継承の構文
|
class 子クラス名 extends 親クラス名 { |
継承の具体例
|
// 親クラス |
継承で出来ること
| 仕組み | 概要 |
|---|---|
| フィールド・メソッドの継承 | 親クラスの protected / public なメンバを子側でそのまま使える |
| メソッドのオーバーライド | 同じシグネチャで挙動を上書きする (@Override を付ける) |
| 多態性 (ポリモーフィズム) | 親クラスの型変数で子インスタンスを扱える |
| 抽象クラス・抽象メソッド | 共通ロジック + 必須実装を子へ強制 |
| final で禁止 | クラスやメソッドの継承・オーバーライドを禁止 |
Java の継承ルール
- クラスの多重継承は不可 (extends は 1 つだけ)。複数の振る舞いを取り込みたい場合はインタフェースを
implementsする - すべてのクラスは暗黙的に
java.lang.Objectを継承 - コンストラクタは継承されない。子側で自分のコンストラクタを定義する
- 子のコンストラクタ先頭で親のコンストラクタが必ず呼ばれる (明示しなければ
super()) privateメンバは継承されるが、子からは直接アクセスできないstaticメンバも継承されるが、本質的にはクラス共有なのでオーバーライドの代わりに「隠蔽 (hiding)」になる- インタフェースは多重実装可。Java 8 以降は
defaultメソッドで実装も持てる
アクセス修飾子と継承可視性
| 修飾子 | 同一クラス | 同一パッケージ | 子クラス | 他 |
|---|---|---|---|---|
public | ○ | ○ | ○ | ○ |
protected | ○ | ○ | ○ | × |
| (無指定 / package-private) | ○ | ○ | × | × |
private | ○ | × | × | × |
オーバーライドのルール
- シグネチャ (メソッド名・引数の型と数) が親と一致すること
- 戻り値は親と同じか、共変な (より狭い) 型でも可
- アクセス修飾子は親と同等以上の公開度 (狭めるのは不可)
- チェック例外は親が宣言しているもの以下に限る
@Overrideアノテーションをつけてコンパイラチェックを利用
継承と合成 (Composition) の使い分け
| 判断軸 | 継承 | 合成 (フィールドとして保持) |
|---|---|---|
| 関係性 | 「〜は〜である (is-a)」 | 「〜は〜を持つ (has-a)」 |
| 結合度 | 強い | 弱い |
| 差分実装の柔軟性 | 制限される | 柔軟 |
| テスト容易性 | 親に依存して難しくなりがち | モック差し替えしやすい |
近年は「Composition over Inheritance」(継承より合成) の方針が主流です。継承は本当に is-a 関係がある場合のみ使い、ふるまいの差し替えはインタフェース+実装注入を活用します。
注意点
- final クラス / final メソッドは継承・オーバーライド禁止 (
Stringは final クラス) - 深い継承階層は理解しづらく壊れやすい。2〜3 階層に留めるのが目安
- サブクラスから親のprotected フィールドを書き換える設計は脆い。getter / setter 経由が安全
- equals / hashCode の継承はサブクラスで再定義が必要なケースが多い
- 差分プログラミング (Diff Programming) の手段としての継承の濫用は強い密結合を生み、変更コストを上げる
関連
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- 【django】ログイン 認証機能 2026-09-08 03:22:09
- MySQL ERROR 1063 Incorrect column specifier for column|原因と直し方 2026-09-08 03:11:09
- 【PHPエラー】Object of class stdClass could not be converted to string 2026-09-07 07:46:04
- Julia Genie ローカル開発サーバ起動完全ガイド 2026-09-07 07:46:04
- Wi-Fi とは|規格と世代(Wi-Fi 4〜7)・周波数帯・CSMA/CA・WPA3 NEW 2026-09-07 07:45:13
- set コマンドでシェルオプションと位置パラメータを操作 | bash 2026-09-07 07:45:13
- JPEG(.jpg/.jpeg)画像形式の完全ガイド — 仕様・マジックナンバー・他形式との比較・EXIF 2026-09-07 07:45:13
- UE5 Get Overlapping Actorsで特定クラスだけ処理|Class Filter・Cast To 2026-09-07 07:45:13
- Linuxで特定拡張子のファイルを再帰削除|find -deleteの安全手順 2026-09-07 07:45:13
- Django CBVでテンプレートに値を渡す|get_context_data・extra_context 2026-09-07 07:45:13
- Linuxで複数ファイルの文字列を一括置換|find・sed・xargsの安全手順 2026-09-07 07:45:13
- Laravelルートグループ|prefix・middleware・nameで一括管理 2026-09-07 07:45:13
- Linux whichコマンドの使い方|絶対パス取得とtype・command -vの違い 2026-09-07 07:45:13
- Linux catコマンドの使い方|行番号表示・複数ファイル連結 2026-09-07 07:45:13
- unable to execute 'gcc': No such file or directory 2026-09-07 07:45:13
コメントを削除してもよろしいでしょうか?