【Java】オブジェクト、クラス、インスタンスの違い
- 作成日:2022/01/20
- 更新日:2022/02/08
Javaでオブジェクト、クラス、インスタンスとう言葉は非常にややこしく、混同されがちです。 これらについてわかりやすく解説します。
それぞれの違い
詳しい解説は後述するとして、まずは結論から述べておきます。
- オブジェクト・・・全ての総称。クラスもインスタンスもオブジェクトに含まれる
- クラス・・・・・・設計図
- インスタンス・・・クラスから生まれたモノ(実態)
イメージするとこんな感じです。
ただ、開発現場ではインスタンスのことをオブジェクトといったりするなど、 これらの言葉を区別しないで使ったりする場合もあります。
とはいえ、これらの違いをしっておくとJavaの理解も深まるのでここで学んでしまいましょう。 説明の都合上、クラスとインスタンスから説明します。
クラスとインスタンス
クラスはよく設計図に例えられます。 例えば、以下のようなクラスがあるとします。
//クラスの宣言
class Human{
int age;
String name;
public void eat(){
System.out.println("食事しました");
};
public void sleep(){
System.out.println("寝ました");
};
}
Humanクラスは年齢・名前という2つの変数と、食べる・寝るという2つのメソッドを持ちます。 もうお気づきかと思いますが、これは人を表すクラスです。
しかし、Javaではクラスを宣言しただけでは人は作れません。人を作るためにはインスタンスを生成します。
public class App {
public static void main(String[] args) {
Human humman = new Human();
humman.age=20;
humman.name="MARK";
humman.eat();
humman.sleep();
}
}
5行目でHumanクラスの人(humman)を作っています。Humanクラスという設計図を元に、hummanというモノ(実態)を作成したのです。
厳密にいうと、Humanクラスは参照型なので5行目の右辺が実行されると、メモリ内のヒープ領域と言われるところにデータ(インスタンス)を保存します。 humman変数にはそのデータのアドレスが格納されます。詳しくは基本データ型(プリミティブ型)と参照型で解説しています。
オブジェクト
クラスやインスタンスを含めた全てのものをオブジェクトといいます。 先ほどの例だと、Humanクラスやインスタンスも全てオブジェクトです。
インスタンスのことをオブジェクトという人もいますが、間違ってはいません。 なぜならインスタンスもオブジェクトの一部だからです。ただし、言い方が大雑把と言えばそうかもしれません。