ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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 と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?