1. ホーム
  2. java

[解決済み] 静的メソッドと非静的メソッドの違いは何ですか?

2022-03-01 08:03:17

質問

以下のコードスニペットをご覧ください。

コード1

public class A {
    static int add(int i, int j) {
        return(i + j);
    }
}

public class B extends A {
    public static void main(String args[]) {
        short s = 9;
        System.out.println(add(s, 6));
    }
}

コード 2

public class A {
    int add(int i, int j) {
        return(i + j);
    }
}

public class B extends A {
    public static void main(String args[]) {
    A a = new A();
        short s = 9;
        System.out.println(a.add(s, 6));
    }
}

これらのコード・スニペットの違いは何でしょうか?どちらも出力は 15 を答えとします。

どのように解決するのですか?

静的メソッドはクラス自体に属し、非静的(別名インスタンス)メソッドはそのクラスから生成される各オブジェクトに属します。もし、メソッドがそのクラスの個々の特性に依存しないことを行うのであれば、staticにします(その方がプログラムのフットプリントが小さくなります)。そうでなければ、非静的であるべきです。

class Foo {
    int i;

    public Foo(int i) { 
       this.i = i;
    }

    public static String method1() {
       return "An example string that doesn't depend on i (an instance variable)";
    }

    public int method2() {
       return this.i + 1; // Depends on i
    }
}

このように静的なメソッドを呼び出すことができます。 Foo.method1() . それをmethod2で試すと失敗します。しかし、これならうまくいく。 Foo bar = new Foo(1); bar.method2();