Javaのクラスの種類一覧!具象・抽象・final・POJO・静的・内部クラスを徹底解説
Javaには、用途や宣言方法に応じてさまざまな種類のクラスが存在します。それぞれのクラスには固有の役割があり、適切に使い分けることで、保守性の高いコードを書くことができます。この記事では、Javaの代表的な6つのクラスの種類について、コード例とともにわかりやすく解説します。
1. 具象クラス(Concrete Class)
具象クラスとは、抽象メソッドを持たない通常のクラス、または親クラスやインターフェースのすべてのメソッドを実装しているクラスのことです。直接インスタンス化できる、最も一般的なクラスです。
コード例
public class Concrete { // 具象クラス
static int product(int a, int b) {
return a * b;
}
public static void main(String args[]) {
int p = product(2, 3);
System.out.println("Product: " + p);
}
}
実行結果
Product: 6
2. 抽象クラス(Abstract Class)
abstractキーワードを使って宣言され、0個以上の抽象メソッドを持つクラスを抽象クラスと呼びます。抽象クラスは未完成のクラスであるため、そのままインスタンス化することはできません。使用する際は、必ず具象クラスに継承(extends)して、抽象メソッドを実装する必要があります。
コード例
abstract class Animal { // 抽象親クラス
public abstract void sound(); // 抽象メソッド
}
public class Dog extends Animal { // DogクラスがAnimalクラスを継承
public void sound() {
System.out.println("Woof");
}
public static void main(String args[]) {
Animal a = new Dog();
a.sound();
}
}
実行結果
Woof
3. finalクラス
finalキーワードで宣言されたクラスはfinalクラスと呼ばれ、他のクラスによる継承が禁止されます。たとえば、標準ライブラリのjava.lang.Systemクラスなどがこれに該当します。セキュリティや不変性を確保したい場合に活用されます。
コード例
final class BaseClass {
void Display() {
System.out.print("This is Display() method of BaseClass.");
}
}
class DerivedClass extends BaseClass { // コンパイルエラー:finalクラスは継承不可
void Display() {
System.out.print("This is Display() method of DerivedClass.");
}
}
public class FinalClassDemo {
public static void main(String[] arg) {
DerivedClass d = new DerivedClass();
d.Display();
}
}
上記の例では、DerivedClass が BaseClass(final)を継承しようとしています。finalクラスは継承できないため、コンパイラがエラーを出力します。したがって、このプログラムは実行できません。
コンパイルエラーの出力例
cannot inherit from final BaseClass Compile-time error - can't inherit final class
4. POJOクラス
POJO(Plain Old Java Object:プレーン・オールド・ジャバ・オブジェクト)クラスとは、プライベートなフィールド変数と、それにアクセスするためのsetter/getterメソッドのみを持つクラスのことです。完全にカプセル化されたクラスであり、データを保持するためのシンプルな構造として広く利用されています。
コード例
class POJO {
private int value = 100;
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
public class Test {
public static void main(String args[]) {
POJO p = new POJO();
System.out.println(p.getValue());
}
}
実行結果
100
5. 静的クラス(Static Nested Class)
静的クラスとは、別のクラスの中でstaticメンバーとして宣言されたネストされたクラス(入れ子クラス)のことです。外部クラスのインスタンスを作成しなくても、独立してインスタンス化できるのが大きな特徴です。
コード例
import java.util.Scanner;
class staticclasses {
static int s; // 静的変数
static void met(int a, int b) { // 静的メソッド
System.out.println("static method to calculate sum");
s = a + b;
System.out.println(a + "+" + b); // 2つの数値を出力
}
static class MyNestedClass { // 静的クラス
static { // 静的ブロック
System.out.println("static block inside a static class");
}
public void disp() {
int c, d;
Scanner sc = new Scanner(System.in);
System.out.println("Enter two values");
c = sc.nextInt();
d = sc.nextInt();
met(c, d); // 静的メソッドを呼び出す
System.out.println("Sum of two numbers-" + s); // 静的変数の結果を出力
}
}
}
public class Test {
public static void main(String args[]) {
staticclasses.MyNestedClass mnc = new staticclasses.MyNestedClass(); // 静的クラスのオブジェクト生成
mnc.disp(); // 静的クラス内のメソッドへアクセス
}
}
実行結果
static block inside a static class Enter two values 10 20 static method to calculate sum 10+20 Sum of two numbers-30
6. 内部クラス(Inner Class)
内部クラスとは、別のクラスやメソッドの中で宣言されたクラスのことです。外部クラスのメンバーにアクセスできるため、密接に関連する処理をひとつにまとめたい場合に便利です。
コード例
public class OuterClass {
public static void main(String[] args) {
System.out.println("Outer");
}
class InnerClass {
public void inner_print() {
System.out.println("Inner");
}
}
}
実行結果
Outer
まとめ
Javaのクラスは、目的に応じて「具象クラス」「抽象クラス」「finalクラス」「POJOクラス」「静的クラス」「内部クラス」など、さまざまな形で定義できます。それぞれの特徴を正しく理解し、状況に応じて適切なクラスを選択することが、読みやすく堅牢なJavaプログラムを書くための第一歩となります。
-
Java 9 JShellの起動スクリプト(DEFAULT・JAVASE・PRINTING)の違いと使い方
JShellは、Java 9で導入された対話型のJavaシェルツールです。コマンドラインプロンプトから起動でき、入力したコードをその場で評価して結果を即座に表示します。いわゆるREPL(Read-Evaluate-Print-Loop:読み込み→評価→表示→繰り返し)ツールとして動作するため、コード断片の動作確認やAPIの学習に非常に便利です。 起動スクリプトの指定方法(--startupフラグ) JShellでは、起動時にスクリプトを読み込むことで、あらかじめ定義済みのimport文や便利なメソッドを使える状態でセッションを開始できます。起動スクリプトを指定するには「--startup」フ
-
Java 9のJShellで使える「/edit」コマンドの種類と使い方
JShellは、Java 9で導入されたコマンドラインツールです。main()メソッドを用意しなくても、宣言・ステートメント・式をその場で評価できるのが大きな特徴です。さらに、JShellにはJShell Edit Padという簡易テキストエディタが組み込まれており、「/edit」コマンドで起動することで、入力済みのコードを手軽に編集できます。 /editコマンドの3つの形式 JShellで利用できる「/edit」コマンドには、次の3つの形式があります。 /edit /edit [ID] /edit [コード名] /edit:引数なしで実行すると、現在アクティブなすべてのコードがテキストエデ