Javaのオブジェクト指向概念詳細

静的コードブロック

public class Employee {
    //2
    {
        System.out.println("初期化ブロック");
    }
    //1 一度だけ実行
    static {
        System.out.println("静的コードブロック");
    }
    //3
    public Employee() {
        System.out.println("コンストラクタ");
    }
}

実行順序は、まず静的コードブロック(一度のみ)、次に初期化ブロック、最後にコンストラクタとなります。

抽象クラス

public abstract class Animal {
    //制約として機能し、サブクラスによる実装を要求
    //抽象メソッドは宣言のみで実装は持たない
    public abstract void makeSound();
    
    public String species;
    //初期化用
    public Animal(String species) {
        this.species = species;
    }
}

抽象クラスの特徴:

  1. 抽象クラスは直接インスタンス化できず、サブクラスを通じて利用
  2. 抽象クラス内に通常のメソッドを定義可能
  3. 抽象メソッドは必ず抽象クラス内に定義
  4. 抽象クラスにもコンストラクタが存在し、情報の初期化に使用
  5. 抽象化の意義は開発効率の向上

インターフェース

//インターフェース:メソッドの実装を持たず、実装クラスが必要
public interface DataService {
    //インターフェース内の定義はすべて抽象的 public abstract
    public static final String VERSION = "1.0";
    public abstract void save();
    void load(String id);
}
//インターフェースを使用した多重継承の実現
public class DataServiceImpl implements DataService, LogService {
    @Override
    public void save() {
        System.out.println("データを保存");
    }

    @Override
    public void load(String id) {
        System.out.println(id + "のデータを読み込み");
    }

    @Override
    public void writeLog() {
        System.out.println("ログを記録");
    }
}

実装クラスはインターフェース内の全メソッドをオーバーライドする必要があります。

インターフェースの利点:

  1. 制約の定義
  2. メソッドの仕様を定義し、異なる開発者が実装可能
  3. implementsを使用して複数のインターフェースを実装可能

例外処理(ExceptionとError)

例外処理にはtry、catch、finally、throw、throwsを使用します。

public class ExceptionDemo {
    public static void main(String[] args) {
        int x = 10;
        int y = 0;
        //例外処理の構造
        try {
            System.out.println(x / y);
        } catch (ArithmeticException e) {
            System.out.println("算術例外発生");
        } catch (Exception e) {
            System.out.println("一般例外発生");
        } catch (Error e) {
            System.out.println("エラー発生");
        } catch (Throwable t) {
            System.out.println("Throwable発生");
        } finally {
            System.out.println("finallyブロック実行");
        }
        //例外キャッチは範囲の小さい順に行う
    }
}
//メソッド内で例外を処理できない場合、メソッド宣言で例外をスロー
public void calculate(int x, int y) throws ArithmeticException {
    if (y == 0) {
        throw new ArithmeticException(); //例外を明示的にスロー、通常はメソッド内で使用
    }
    System.out.println(x / y);
}

タグ: Java オブジェクト指向 抽象クラス インターフェース 例外処理

7月1日 00:11 投稿