PR

Java:クラスとオブジェクトの概念をわかりやすく3分で解説

Java

Javaはオブジェクト指向プログラミング(OOP)を基盤としたプログラミング言語です。つまり、その中核をなすのが「クラス」と「オブジェクト」の概念です。この2つの概念を理解することで、効率的なプログラムの設計や、より複雑なアプリケーション開発を行うことができるようになります。

が、特にプログラミング初心者にとってはこの概念が鬼門で「オブジェクト指向」って何?というところで挫折してしまう方も多くいらっしゃいます。なので、このページでは①クラスとオブジェクトの基本的な概念から解説し、②具体的なコード例を通じてその使い方を詳しく解説していきます。日常生活に例えながら説明していきますので、初心者の方でもきっと理解できるはず。

関連 Javaの1stステップ:基本的な構文ルールを1分で復習!

この記事を読み終える頃には、クラスとオブジェクトの役割を深く理解し、実践的に活用できるようになっているでしょう。

スポンサーリンク

Java「クラス」と「オブジェクト」

Javaはオブジェクト指向プログラミングという考え方を基本にして作られた言語です。このオブジェクト指向プログラミングを理解するために欠かせないのが、「クラス」と「オブジェクト」という2つの概念。結論からざっくり説明すると、クラスは「設計図」、オブジェクトはその設計図を元に作られた「製品」のようなもの。

例えば「車」を作る場合。車を作る場合に必要となるのがとりあえず必要となるのが設計図です。この設計図がクラス。で、設計図には車の種類や色、エンジンの種類などが記載されていますが、この設計図を元に実際に作られた車がオブジェクトです。

ざっくり以下のイメージが頭に思い浮かべられればひとまずOK。あとはコーディングしていくことで、なるほど・・・!となるはずです。

Java クラスとオブジェクト
図1:クラスとオブジェクト

より具体的に説明すると、クラスはそのオブジェクトの性質や動きを定義するもの。つまり、車で言えば「車とは何か」「車はどう動くか」を決めるのがクラス。そして、そのクラスに基づいて作られた具体的な車、例えば「赤いスポーツカー」がオブジェクトです。

次の章からは、クラスとオブジェクトの概念と同時に、それをJavaでどのように使うかを具体的な例を使って詳しく解説していきます。

Java:クラスの定義

クラスとは、オブジェクトの「設計図」のようなものです。クラスは、オブジェクトが持つ属性(プロパティ)や、どのような動きをするか(メソッド)を定義します。

ここでは日常生活の例を用いてスマートフォンのクラスを作っていきたいと思います。スマートフォンには、OSやメーカー、モデルなどの属性(プロパティ)があります。また、電話をかけたり、インターネットに接続したり、写真を撮ったりする機能(メソッド)も持っています。図にすると以下のような感じ。

図1:クラスとメソッド/プロパティ

Javaでは↓のように、スマートフォンを表現するクラスを定義します。

public class Smartphone {
    // フィールド(プロパティ)
    String os;       // OS
    String maker;    // メーカー
    String model;    // モデル

    // コンストラクタ(オブジェクトを初期化するための特別なメソッド)
    public Smartphone(String os, String maker, String model) {
        this.os = os;
        this.maker = maker;
        this.model = model;
    }

    // メソッド(動きや機能)
    public void makeCall(String number) {
        System.out.println("Calling " + number + "...");
    }

    public void connectToInternet() {
        System.out.println("Connecting to the internet...");
    }

    public void takePhoto() {
        System.out.println("Taking a photo...");
    }
}

↑の例では、Smartphoneという名前のクラスを作成しています。これが設計図の名前で、後で実際に製品を製造(オブジェクトを作る)際に利用されます。

public class Smartphone {
-------------------------
}

そして、このクラスには、3つのプロパティ(osmakermodel)があることが分かります。プロパティと言っても、結局はクラスの中で定義するただの「変数(変数とは?)」です。

    // フィールド(プロパティ)
    String os;       // OS
    String maker;    // メーカー
    String model;    // モデル

さらに、Smartphoneクラスにはコンストラクタと呼ばれる特別なメソッドがあり、新しいSmartphoneオブジェクトを作成するときにOS、メーカー、モデルを設定されていることが分かります。(「コンストラクタ」については別途詳細を解説するので、ここではひとまず初期化用のメソッドだと理解すればOKです。)

参考 Javaのメソッドとは?メソッドの使い方を解説

    // コンストラクタ(オブジェクトを初期化するための特別なメソッド)
    public Smartphone(String os, String maker, String model) {
        this.os = os;
        this.maker = maker;
        this.model = model;
    }

そして、最後にmakeCallconnectToInternettakePhotoという3つのメソッドを使って、オブジェクトが電話をかけたり、インターネットに接続したり、写真を撮ったりする機能を定義しています。

    // メソッド(動きや機能)
    public void makeCall(String number) {
        System.out.println("Calling " + number + "...");
    }

    public void connectToInternet() {
        System.out.println("Connecting to the internet...");
    }

    public void takePhoto() {
        System.out.println("Taking a photo...");
    }

ポイント クラスの主な構成要素

  1. プロパティ(フィールド)
    • オブジェクトが持っている「特徴」や「情報」を表します。(例: OS、メーカー、モデル)。
  2. コンストラクタ
    • 新しいオブジェクトを作成するときに呼ばれる特別なメソッド。コンストラクタは、オブジェクトが持つプロパティを初期設定(最初の値をセット)するために使われる。
  3. メソッド
    • オブジェクトの動きや機能を定義する(例: 電話をかける、インターネットに接続する、写真を撮る)

Java:オブジェクトの作成(インスタンス化)

オブジェクトは、クラスに基づいて作成される「具体的なもの」です。クラスが設計図なら、オブジェクトはその設計図から作られた実際の製品にあたります。オブジェクトはクラスで定義されたプロパティ(属性)やメソッド(機能)を持ち、それらを使ってさまざまな動作をします。

先ほどのスマートフォンの例で言えば、「OS」や「メーカー」「モデル」といったプロパティ、「電話をかける」「インターネットに接続する」「写真を撮る」といったメソッドが全てクラスで定義されますが、実際にそのクラスから作られる具体的なスマートフォンがオブジェクトです。

Java クラスとオブジェクト
(再掲)図1:クラスとオブジェクト

具体的に、Javaでスマートフォンのオブジェクトを作成する例を見てみましょう。

public class Main {
    public static void main(String[] args) {
        // Smartphoneクラスからオブジェクトを作成
        Smartphone myPhone = new Smartphone("Android", "Google", "Pixel");
        
        // オブジェクトのメソッドを使う
        myPhone.makeCall("123-456-7890");
        myPhone.connectToInternet();
        myPhone.takePhoto();
    }
}

これはSmartphoneクラスを使ってmyPhoneという名前のオブジェクトを作成する例です。Javaでは、newキーワードを使ってオブジェクトを作成します。以下の部分がそれ。

// Smartphoneクラスのインスタンス化(オブジェクトを作る)
Smartphone myPhone = new Smartphone("Android", "Google", "Pixel 5");

この部分を簡単に説明すると、

  1. Smartphone myPhone →「Smartphone型の変数myPhoneを作っている」こと。Smartphoneクラスは設計図であり、myPhoneという名前の変数をその設計図の型で作成しています。
  2. new Smartphone("Android", "Google", "Pixel 5") →「Smartphoneクラスに基づいて具体的なオブジェクトを作り、そのオブジェクトにOS、メーカー、モデルの情報をセットしている」ことを意味します。

つまり、この行全体では「Smartphone型の変数myPhoneを作り、その変数に具体的なSmartphoneオブジェクト(AndroidOSのGooglePixel 5)を代入している」ことを示しています。これが本質です。

    尚、クラスからオブジェクトを作成することを具体的に「インスタンス化」と言います。実際の現場でも、オブジェクトを作成する、とは言わず基本的には「インスタンス化」という言葉が利用されるので覚えておくと良いでしょう。

    ポイント オブジェクトのポイント

    1. インスタンス化
      • クラスを基にして具体的なオブジェクトを作成することを「インスタンス化」と呼ぶ。↑のサンプルコードでは、new Smartphone("Android", "Google", "Pixel")がインスタンス化の部分。
    2. プロパティの利用
      • オブジェクトはクラスで定義されたプロパティを持ち、それぞれのプロパティに特定の値が設定されます。↑のサンプルでは、myPhoneosmakermodelに値が設定されている。
    3. メソッドの利用
      • オブジェクトは、クラスで定義されたメソッドを使って動作します。↑のサンプルでは、makeCallconnectToInternettakePhotoといったメソッドを呼び出している。

    オブジェクトは、実際にプログラムが動作する際に使われる具体的な「もの」です。クラスという設計図からオブジェクトを作成し、そのオブジェクトを操作することで、プログラムが様々な動きを実現します。

    クラスとオブジェクトの利点

    クラスとオブジェクトを使う利点はプログラムがとても効率的でわかりやすくなるということで。クラスは設計図なので、同じ設計図を使っていろいろなオブジェクトを作ることができます。これにより、コードを何度も書く必要がなくなります。

    例えば、スマートフォンを例に考えてみましょう。まず、スマートフォンの設計図を作成します。

    public class Smartphone {
        String os;
        String maker;
        String model;
    
        public Smartphone(String os, String maker, String model) {
            this.os = os;
            this.maker = maker;
            this.model = model;
        }
    
        public void makeCall(String number) {
            System.out.println("Calling " + number + "...");
        }
    
        public void connectToInternet() {
            System.out.println("Connecting to the internet...");
        }
    
        public void takePhoto() {
            System.out.println("Taking a photo...");
        }
    }

    この設計図を使って、具体的なスマートフォンを作ってみます。

    public class Main {
        public static void main(String[] args) {
            Smartphone phone1 = new Smartphone("Android", "Google", "Pixel 5");
            Smartphone phone2 = new Smartphone("iOS", "Apple", "iPhone 12");
    
            phone1.makeCall("123-456-7890");
            phone1.connectToInternet();
            phone1.takePhoto();
    
            phone2.makeCall("098-765-4321");
            phone2.connectToInternet();
            phone2.takePhoto();
        }
    }

    このコードを見ると、クラスとオブジェクトの利点がよくわかるはず。まず、同じスマートフォンの設計図(クラス)を使って、異なるスマートフォン(オブジェクト)を簡単に作ることができます。phone1はGoogleのPixel 5、phone2はAppleのiPhone 12です。

    設計図を一度作れば、いろいろなスマートフォンを作るのにその設計図を使い回せるので、非常に便利です。

    また、設計図に変更があった場合、一箇所を修正するだけですべてのオブジェクトにその変更が反映されます。例えば、スマートフォンに新しい機能を追加したいとき、クラスにその機能を追加するだけで、すべてのスマートフォンオブジェクトがその新しい機能を持つようになります。

    さらに、クラスを使うことで、プログラムが整理されてわかりやすくなります。設計図に基づいてオブジェクトが作られるため、それぞれのオブジェクトがどのような特性を持ち、どのような動きをするかが一目瞭然です。

    クラスとオブジェクトを使うことで、コードの再利用が可能になり、プログラムの保守が簡単になり、全体の構造が明確になるという大きな利点があります。これが、クラスとオブジェクトの大きなメリットです。

    まとめ クラスとオブジェクトの利点

    1. 再利用性
      • クラスを一度定義すれば、何度でもそのクラスを基にオブジェクトを作成できる。これにより、コードの再利用性が高まり、プログラムの開発効率が向上する。
    2. 保守性
      • クラスを使ってプログラムを構成することで、変更が必要な場合でも特定のクラスのみを修正すれば済むため、保守が容易になる。
    3. データの一貫性
      • クラスによってデータの構造が統一されるため、データの一貫性を保つことができる。

    このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

    1. 勉強:一度理解した内容を忘れないように。
      → アウトプットは「最強のインプット」である! 
    2. 備忘:忘れたとしても後から見返せるように。
      → 未来の自分への「お手紙」を書いています。 
    3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
      → あなたの知識は誰かにとっての「価値ある情報」です。 

    副業ブログの始め方はこちらから

    スポンサーリンク
    Java
    シェアする
    ビズドットオンラインをフォローする
    タイトルとURLをコピーしました