Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

継承について

More than 1 year has passed since last update.

image.png

説明する時にいつも読むのでまとめ

継承とは

共通点と相違点を体系的に分離して整理するもの

  • クラスの共通部分を親クラスにまとめる仕組み
  • 親クラスに共通の性質を定義し、子クラスに固有の性質を定義するもの
  • コードの重複を排除して汎用性の高い部品をつくる仕組みの1つ
  • オブジェクト指向三大要素の1つ
  • 全体集合と部分集合の関係性を表す(集合論でいうスーパーセットとサブセット)

特徴

概念的側面(現実世界)

分類体系が説明できる

  • 例えば「動物」と「人間」と「鳥」
    • 「動物」(上位)の中の「鳥」
    • 「人間」(下位)は「動物」の1つ
    • 「鳥」は(下位)は「動物」の1つ

技術的側面(プログラミング)

継承を宣言するだけで親クラスの変数とメソッドを全て定義したことになる

  • スーパークラスとサブクラスそれぞれのメソッドとして成立する
  • 例えば「Animal」と「human」と「bird」
    • 「動物」は「人間」も「鳥」も「食べる」けど、「人間は歩く」し、「鳥は飛ぶ」
    • 「動物」は「人間」も「鳥」も「食べる」けど、「人間は飛ばない」し、「鳥は歩け、、る」(今回は歩けないとする)
    • 共通の性質だけまとめて同じクラスに定義する

プログラミング技術における「抽象」を利用した場合

Animal.java
public abstract class Animal {
    public void eat() {
        System.out.println("ぱくぱく");
    }
}
Human.java
public class Human extends Animal {
    public void walk() {
        System.out.println("てくてく");
    }
}
Bird.java
public class Bird extends Animal {
    public void fly() {
        System.out.println("ばさばさ");
    }
}
Main.java
public class Main {
    public static void main(String[] args) {
        Bird bird = new Bird();
        bird.eat();
        bird.fly();

        Bird human = new human();
        human.eat();
        human.walk();
    }
}

ポイント

  • 子クラス内で継承を宣言(extends)しているので、子クラスをインスタンス生成(new)すると、子クラスにメソッドがなくても親クラスのメソッドが使える(eatメソッドが呼び出せる)
  • 継承はポリモーフィズムを実現する機能の1つでもある

関連記事

オブジェクト指向でなぜつくるのかまとめ

書籍情報

平澤 章 (著) オブジェクト指向でなぜつくるのか 第2版
https://amzn.to/2VSrzwe

雑感

そういえば鳥は歩ける。たまに飛べない鳥もいる。

こういうのも現実世界に当てはめようとするとあれれとなるので、あくまで仕様的に問題ないということで。
今回「技術的側面」の部分で満たしたい「要件」は「親のメソッドを子生成後に呼べることの説明」なので「鳥」が歩かないことは仕様的に問題ない

dich1
やったことあるのに思い出せない。をなくしたい
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away