📜

クラスとインスタンス

2025/03/27に公開

まえがき

chat-gptで作った学習ロードマップをプログラミング初学者が勉強する試みです
ロードマップはchat-gptを使用してますが、学習は公式のチュートリアルや技術系ブログなどを参考にしています
Goの復習も兼ねているのでGoとの違いについても言及します
今回はクラスとインスタンスについて内容をまとめていきます

クラスとは?

クラスはオブジェクトの設計図の役割を持ち、データ(フィールド)と振る舞い(メソッド)を定義することができる
ひとつのjavaファイルには、ひとつのクラスが基本(ネストされたクラスは別)

クラスの宣言方法

クラスはclassキーワードを使って宣言する

最小限のクラス
class クラス名 {
	メンバー定義
}

クラスの宣言にはアクセス修飾子やその他の修飾子、extendsやimplementsなどのキーワードを付けることができる

メンバー定義には以下のものを含めることができる

  • フィールド
  • コンストラクタ
  • メソッド
  • ネストされたクラス

フィールドにふたつのint型を、
メソッドにフィールドの値を合算して出力させる機能を持つクラスは以下のように書く

クラスの宣言例
class Sum {
	// フィールド
	int i1;
	int i2;

	// メソッド
	void print() {
		System.out.print(i1 + i2);
	}
}

修飾子は省略してあるので同じパッケージであればアクセスできる
コンストラクタが省略してある場合はデフォルトのコンストラクタが適用される

命名規則について

クラス名は頭文字が大文字
=>Sum
変数は小文字の単語(複数単語の場合はキャメルケース)
=>numberOne
定数はアッパースネークケース
=>ALL_NUMBERS
メソッドは小文字の動詞(複数単語の場合はキャメルケース)
=>printNumber

インスタンスとは?

インスタンスとは、クラスをもとに生成される具体的なオブジェクトのこと
クラスは設計図に過ぎないので、実際に利用するにはインスタンスを作成して使う
(実際のところクラス自体もオブジェクトなのでstatic修飾子を付ければアクセスできる)

インスタンスの作成方法

インスタンスはnewキーワードを使って初期化して使う

Main.java
public class Main {
	public static void main(String[] args) {
		// インスタンスの初期化
		Sum s = new Sum();

		// フィールドに値をセット
		s.i1 = 5;
		s.i2 = 10;

		// メソッドの呼び出し
		s.print();
	}
}

コンストラクタはクラス名と同じSumを使う
インスタンス名.フィールド名
インスタンス名.メソッド名
の形式でアクセスできる

JavaとGoの違い

Goにはclassの概念が無いので代わりにstruct(構造体)とメソッドを利用する

それぞれ以下のように代替として使用できる

  • Goのstructはclassのフィールド
  • Goのメソッドはclassのメソッド

Goのstruct

typeで宣言して名前とstructキーワードを指定する

Go:最小限のstruct
type 構造体の名前 struct {
	フィールド
}

Goのメソッド

関数と似た形だが func キーワードの後ろにレシーバという特別な引数を持つ

Go:最小限のメソッド
func (任意の変数名 構造体の名前)メソッド名() {
	処理
}

任意の変数名は頭文字のひともじを使うのが慣習
関数と同じようにメソッド名の後ろの括弧内に引数、波括弧の前に返り値を付けることができる

Goでクラスっぽいことをする

type Sum struct {
	// フィールド
	i1 int
	i2 int
}

	// メソッド
func (s Sum)print() {
	fmt.Print(s.i1 + s.i2)
}

Go: インスタンスの作成方法

インスタンスは := キーワードを使って初期化して使う

Goでメソッドを使う
func main() {
	// インスタンスの初期化
	s := Sum{}
	// s := Sum{5, 10}
	// 初期化と同時に値をセットもできる

	// フィールドに値をセット
	s.i1 = 5
	s.i2 = 10

	// メソッドの呼び出し
	s.print()
}

インスタンス名.フィールド名
インスタンス名.メソッド名
の形式でアクセスできる

のちに出てくるカプセル化もかなり似ている
コンストラクタはメソッドを利用して作る

まとめ

クラスの概念がないと言われているGoだが、実際はかなり近い機能を持っていてスムーズに学習できた
javaファイルやclass管理などの慣習が初心者向けの学習サイトで見当たらなかったので少し戸惑った

そして当たり前だけど、さすがに公式のチュートリアルはかなりわかりやすかった

Discussion