基本情報技術者 2018年 春期 午前(科目A) 問46
問題文
オブジェクト指向において、あるクラスの属性や機能がサブクラスで利用できることを何というか。
選択肢
ア:オーバーライド
イ:カプセル化
ウ:継承(正解)
エ:多相性
🔒 解説は解答すると表示されます
継承(オブジェクト指向)【午前解説】
正解の理由
正解は ウ 継承 です。
継承(inheritance)はスーパークラス(親クラス)が持つ属性(フィールド)や動作(メソッド)をサブクラス(子クラス)が受け継ぎ利用できる仕組みを指します。問題文の「あるクラスの属性や機能がサブクラスで利用できること」という定義に一致するため、ウが正解となります。
継承(inheritance)はスーパークラス(親クラス)が持つ属性(フィールド)や動作(メソッド)をサブクラス(子クラス)が受け継ぎ利用できる仕組みを指します。問題文の「あるクラスの属性や機能がサブクラスで利用できること」という定義に一致するため、ウが正解となります。
解法ステップ
- 問題文のキーワード「属性や機能がサブクラスで利用できる」を抽出する。
- 各選択肢の定義を瞬時に思い出す(継承、カプセル化、オーバーライド、多相性)。
- 「利用できる」という表現が「受け継ぐ(inherit)」の意味に合致することを確認して該当する選択肢を選ぶ。
- 他の選択肢が「上書き・隠蔽・置換」に関する用語であることを理由に除外する。
選択肢別の誤答解説
- ア: オーバーライド
オーバーライドはサブクラスがスーパークラスのメソッドを上書き(再定義)することであり、「利用できること」を指す用語ではありません。継承が前提となる操作です。 - イ: カプセル化
カプセル化はデータとメソッドを一つの単位にまとめ、内部実装を隠蔽する概念であり、サブクラスが利用できるという意味とは異なります。 - ウ: 継承
正解。スーパークラスの属性や機能(メソッド)をサブクラスが受け継いで利用できる性質を指します。IS-A 関係で表現されることが多いです。 - エ: 多相性
多相性(ポリモーフィズム)は同じインタフェースで異なる実装を扱える性質で、継承により実現されることもありますが、「属性や機能がサブクラスで利用できること」とは定義が合いません。
よくある誤解
- 「オーバーライドが継承そのものだ」と混同する誤解:オーバーライドは継承したメソッドを上書きする操作であり、継承自体の定義とは別です。
- 「継承すればスーパークラスの private メンバが直接使える」と思う誤解:private は継承はされるがサブクラスから直接アクセスできない点を見落としがちです。
- 「継承 = 常に最良の設計」との誤解:再利用性は高まるが強い結合を生みやすく、合成(コンポジション)を用いるべき場合もあります。
補足コラム
継承に関する実装上のポイントや注意点を整理します。
- アクセス修飾子:public/protected と private の扱いに注意。private は継承されるがサブクラスからアクセス不可、protected はサブクラスでアクセス可能です。
- 単一継承 vs 多重継承:言語によってサポート状況が異なる(Java はクラスの多重継承を持たずインタフェースで代替)。
- 合成を検討:設計上は「継承より合成(has-a)を優先する」ことが推奨される場合が多く、継承は「A は B である(IS-A)」が自然に成り立つ場合に用います。
- Liskov 置換原則(LSP):サブクラスはスーパークラスの代替として振る舞えるべきで、継承を使う際の設計指針になります。
コード例(Java)
class Animal {
protected String name;
public void eat() { System.out.println("食べる"); }
}
class Dog extends Animal {
public void bark() { System.out.println("ほえる"); }
}
Dog d = new Dog();
d.name = "ポチ"; // protected のため可
d.eat(); // スーパークラスのメソッドを利用できる(継承の例)
FAQ
Q1: private フィールドはサブクラスから使えますか?
A1: private はサブクラスから直接アクセスできませんが、スーパークラス内に存在するため継承の対象にはなります。アクセスするには protected や public、あるいはアクセサ(getter/setter)を利用します。
A1: private はサブクラスから直接アクセスできませんが、スーパークラス内に存在するため継承の対象にはなります。アクセスするには protected や public、あるいはアクセサ(getter/setter)を利用します。
Q2: 継承と多相性はどう関係しますか?
A2: 多相性は継承(やインタフェース実装)によって同じ型で異なる具体実装を扱える性質のことで、継承は多相性を実現する手段の一つです。
A2: 多相性は継承(やインタフェース実装)によって同じ型で異なる具体実装を扱える性質のことで、継承は多相性を実現する手段の一つです。
Q3: 継承を乱用するとどうなりますか?
A3: クラス間の結合度が高まり変更に弱くなるため、設計が複雑化します。必要に応じて合成を検討してください。
A3: クラス間の結合度が高まり変更に弱くなるため、設計が複雑化します。必要に応じて合成を検討してください。
関連キーワード: 継承、オーバーライド、カプセル化、多相性、ポリモーフィズム、サブクラス、スーパークラス、アクセス修飾子、合成(コンポジション)、Liskov置換原則

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

