16
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

インスタンスメソッド、クラスメソッドの違いについて

Posted at

はじめに

以前書いた「インスタンス変数、クラス変数の違い」が反響がありましたので、
(読んでくださった皆さん、本当にありがとうございます🙏)、
そちらの続編としてメソッドについて説明していきたいと思います。

インスタンスメソッド

インスタンス変数もしくはインスタンスメソッドを利用する場合に使われるメソッドです。
インスタンスという名前がついている通り、インスタンスに依存する処理を行うので、
メソッドを呼び出す前にインスタンスを作成する必要があります。

クラスメソッド

インスタンスの中身に関係なく、共通の処理を行うときに利用されるメソッドです。
インスタンスに依存せず、処理内容が不変なことから英語で「静的」という意味のstaticをメソッドにつけます。
そのため、クラスメソッドの中ではそのクラスのインスタンス変数 or インスタンスメソッドは利用できません。(=thisを利用することはできない。)
その代わり、インスタンスに依存してないので、インスタンスを作成していなくても利用することができます。

使い分け

使い分けは至ってシンプルで、

インスタンス変数 or インスタンスメソッドをメソッド内で利用する必要があるか?

という質問に対して、
Yes(どちらか片方は必要)の場合、インスタンスメソッド
No(どちらも必要ない)の場合、クラスメソッド

を定義すればよい。

それぞれの特徴

  インスタンスメソッド クラスメソッド
特徴 インスタンスに依存する処理を行う インスタンスに依存せず、共通の処理を行う
呼び出し方 1.オブジェクトを代入した変数.インスタンス変数
2.this.インスタンス変数(※インスタンスメソッドを定義したクラスから作成されたインスタンスを指し示す時に使う書き方)
1.クラス名.クラスメソッド
2.オブジェクトを代入した変数.クラスメソッド
3.クラスメソッド(※クラスメソッドの定義元であるクラスでのみ可能な書き方)
定義 アクセス修飾子 戻り値の型 メソッド名 アクセス修飾子 staticキーワード 戻り値の型 メソッド名
this 使える 使えない
オーバーライド できる できない

具体例

Person.java
public class Person {

    private int age;
    private String name;
    private int birthYear;

    Person (int birthYear, String name) {
        this.birthYear = birthYear;
        this.name = name;
        this.age = this.calcAge();
    }

    public int calcAge() {
        return 2021 - this.birthYear;
    }

    public void printBirthYear() {
        System.out.println("あなたは" + this.birthYear + "年生まれです。");
    }

    public static void eat() {
        System.out.println("人間は食べ物を毎日食べる");
    }
}

Main.java
public class Main {
    public static void main(String[] args) {
        Person person = new Person(1994, "Taro");
        person.printBirthYear();
        // 以下の2つは呼び出し方が違うだけで、実行しようとしている処理は一緒
        Person.eat();
        person.eat();
    }
}
Mainの実行結果
あなたは1994年生まれです
人間は食べ物を毎日食べる
人間は食べ物を毎日食べる

まとめ

前回の記事と今回の記事ではJavaを使って説明しましたが、定義方法は違えど基本的な思想は他の言語でも
応用できるので、ぜひとも読んでいただければ幸いです。
次回は、thisとsuperの違い+αを記事にしようと考えております。

16
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?