【Java】クラスの書き方と使い方の基本
Javaのクラスの基本概念と具体的な使い方を、システムエンジニア初心者にも分かりやすく解説します。クラスがオブジェクトの設計図となる仕組みや、フィールド・メソッドの定義、命名規則を学びます。さらに、継承やメソッドのオーバーライドといったオブジェクト指向プログラミングの基礎を、サンプルコードを用いて実践的に習得できます。
開発環境
- OS: Windows10
- Editor: Visual Studio Code
- Java: 22.0.2
Javaのクラスとは
Javaにおけるクラスは、プログラム上で作成される「オブジェクト」の元となる「設計図」または「テンプレート」として機能します。
具体的には、クラスを定義することで、どのような種類の情報(データ)を持ち、どのような操作(動作)ができるのか、その「型」を定めることができます。このクラスという設計図に基づいて、プログラムの中で具体的な「オブジェクト」と呼ばれる実体を作成します。オブジェクトは、クラスという設計図から作られた具体的な実体のことです。
クラスの中には、主に二つの要素を定義します。
一つは「フィールド」と呼ばれるものです。フィールドは、そのクラスが持つ「データ」を表します。これは、プログラムにおいて「変数」として扱われ、オブジェクトの状態や属性を保持します。
もう一つは「メソッド」と呼ばれるものです。メソッドは、そのクラスが実行できる「動作」を表します。これは、プログラムにおいて「関数」として扱われ、オブジェクトの振る舞いや処理を定義します。
クラスは、このように関連するデータであるフィールドと、それらのデータを使って実行される動作であるメソッドを一緒に管理します。これにより、プログラムの要素を論理的にグループ化し、コードの構造を整理して、再利用性を高めることができます。
基本用語
-
クラス: オブジェクトを生成するためのテンプレート クラスとは、プログラムの中で扱う「モノ」(オブジェクト)を作り出すための、設計図やひな形のようなものです。どのような情報(データ)を持つのか、どのような動作(機能)をするのかを、ここで定義します。例えば、「車」というクラスを定義する際に、色や速度といったデータ、走る、止まる、といった機能を持つことを指定できます。
-
インスタンス: クラスを基に生成されたオブジェクト インスタンスとは、クラスという設計図に基づいて実際に生成された、具体的な「モノ」のことです。クラスが「車」という設計図だとすると、インスタンスは「赤いセダン」や「白いSUV」といった、個々の具体的な車を指します。それぞれのインスタンスは、クラスで定義されたデータや機能を持っています。
-
アクセス修飾子: クラス、メソッド、フィールドのアクセス範囲を制御するキーワード アクセス修飾子とは、プログラムを構成する要素(クラス、その中のメソッドやフィールドと呼ばれる部品)が、他の部分からどれくらいの範囲で利用できるかを指定するためのキーワードです。これにより、プログラムの部品が意図しない場所から勝手に変更されたり、利用されたりするのを防ぎ、安全で管理しやすいプログラムを作ることができます。
-
public: どこからでもアクセス可能publicと指定された要素は、プログラム内のどの場所からでも自由にアクセスして利用することができます。これは、他の多くの部分から利用されることを前提とした、公開された要素に用いられます。 -
protected: 同じパッケージ内、またはサブクラスからアクセス可能protectedと指定された要素は、同じ「パッケージ」(関連するクラスをまとめたグループ)の中にあるクラス、またはそのクラスを継承して作られた「サブクラス」からのみアクセスが可能です。直接関係のない外部のクラスからは利用できませんが、特定の関係性を持つクラスには利用を許可したい場合に設定します。 -
private: クラス内のみアクセス可能privateと指定された要素は、それを定義したクラスの内部からしかアクセスできません。他のどのクラスからも利用できないため、そのクラスの内部だけで完結する、外部からは隠しておきたいデータや機能に用いられます。これにより、外部からの不適切な操作を防ぎ、クラスの独立性を保ちます。 -
(アクセス修飾子なし): パッケージ内でのみアクセス可能 アクセス修飾子を何も指定しなかった場合、その要素は同じパッケージ内に属するクラスからのみアクセスが可能です。パッケージの外部からはアクセスできません。これは、主に同じパッケージ内で利用されることを想定した、内部的な要素に用いられます。
クラスの命名規則
プログラミングにおいて、クラスはオブジェクト指向プログラミングの基本的な要素であり、プログラムの構成単位として使用されます。クラスに名前を付ける際のルールを「命名規則」と呼びます。適切な命名規則に従うことは、コードの可読性を高め、他の開発者との協力作業を円滑にするために非常に重要ですし、将来の保守性にも繋がります。
クラス名は大文字で始める
クラス名を決定する際には、名前の最初の文字を必ず大文字で始めます。例えば、ユーザー情報を扱うクラスであれば、Userと記述します。userのように小文字で始めるのではなく、Userのように大文字で始めることで、その名前がクラスであることを明確に示し、コードを見た人が容易に理解できるようにします。
2つ以上の単語で構成される場合、キャメルケース(例: StudentInfo)を使用します
クラス名が複数の単語から構成される場合、「キャメルケース」という記述形式を使用します。キャメルケースでは、最初の単語の頭文字を大文字にし、それ以降の各単語の頭文字も大文字にして連結します。単語の間にスペースやアンダースコアなどの記号は入れません。例えば、学生の情報を扱うクラスであれば、StudentInfoと記述します。ここで例として挙げられているStudentInfoは、StudentとInfoという2つの単語を組み合わせ、それぞれを大文字で始めることで、読みやすさを保っています。このルールを守ることで、コード全体の一貫性が保たれ、プログラムがより分かりやすくなります。
これらの命名規則に従うことで、作成するプログラムの品質が向上し、他の人にとっても理解しやすいコードになります。
クラスの構造
クラスとは、プログラムの中で扱う「もの」や「概念」を定義する設計図のようなものです。 例えば、「車」というものをプログラムで表現する場合、車が持っている「色」や「速度」といった特徴と、「走る」や「止まる」といった動作をひとまとめにして定義することができます。 この「車」の設計図がクラスにあたります。
クラスの基本的な構造は下記になります。
この構造について詳しく説明します。
まず、「class クラス名」の部分で、これから作成するクラスの名前を決定します。この名前は、そのクラスが何を表すのかを明確に示せるように付けることが重要です。
次に、波括弧 {} の内側には、「フィールド」と「メソッド」を定義します。
「フィールド(プロパティ)の定義」は、そのクラスが持つ「特徴」や「状態」を表すものです。先ほどの車の例で言えば、「色」や「現在の速度」、「走行距離」などがフィールドに該当します。これらはクラスが持つデータを定義する部分です。
「メソッド(関数)の定義」は、そのクラスが「できること」や「振る舞い」を表すものです。車の例で言えば、「走る」「止まる」「加速する」「ブレーキをかける」といった動作がメソッドに該当します。これらはクラスが実行できる処理を定義する部分です。
このように、クラスは、対象となる「もの」の「特徴(データ)」と「できること(処理)」をまとめて定義するための構造です。システムエンジニアとしてプログラムを開発する際には、このクラスを適切に設計することが非常に重要になります。
1class クラス名 { 2 フィールド(プロパティ)の定義 3 メソッド(関数)の定義 4}
サンプルコード
java/chapter14/Main.java
Main.java1/** 2 * サンプルコード4: メソッドのオーバーライド 3 * - サブクラスでスーパークラスのメソッドを再定義する 4 * - アノテーション`@Override`を付けることで、オーバーライドであることを明示できる 5 */ 6public class Main { 7 public static void main(String[] args) { 8 // インスタンスの生成 9 Person person = new Person("山田", 30); 10 User user = new User("山田", 30); 11 12 // メソッドの呼び出し 13 person.introduce(); 14 user.introduce(); 15 } 16} 17 18class Person { 19 // フィールド (プロパティ) 20 public String name; 21 public int age; 22 23 // コンストラクタ 24 public Person(String name, int age) { 25 this.name = name; 26 this.age = age; 27 } 28 29 // メソッド (インスタンスメソッド) 30 public void introduce() { 31 System.out.println(name + "は" + age + "歳です。"); 32 } 33} 34 35class User extends Person { 36 public User(String name, int age) { 37 super(name, age); 38 } 39 40 @Override 41 public void introduce() { 42 System.out.println("ユーザー" + name + "は" + age + "歳です。"); 43 } 44} 45
おわりに
本記事では、Javaにおけるクラスがオブジェクトの設計図であり、データを持つフィールドと操作を行うメソッドで構成されることを学びました。インスタンスやアクセス修飾子といった基本用語、そしてクラスの命名規則や基本的な構造についても確認しました。また、サンプルコードを通して、クラスの継承やメソッドのオーバーライドといったオブジェクト指向の概念を実践的に理解することができました。これらの基礎知識は、Javaでより複雑なシステムを構築する上で不可欠な要素です。