/** * ドメイン非依存URL出力フィルタ * javadrill.tech移行時はwp_options.home/siteurlのみ変更すればよい * * データベースには絶対URL(https://minner.asia)を保持し、 * 表示時に現在のドメイン(home_url())に動的変換する */ function javadrill_make_urls_dynamic($content) { if (empty($content)) { return $content; } // データベース内の絶対URLを現在のhome_url()に置換 $old_url = 'https://minner.asia'; $new_url = untrailingslashit(home_url()); // http版も対応(念のため) $content = str_replace($old_url, $new_url, $content); $content = str_replace('http://minner.asia', $new_url, $content); return $content; } // 投稿本文、ウィジェット、タームの説明、抜粋に適用 add_filter('the_content', 'javadrill_make_urls_dynamic', 20); add_filter('widget_text', 'javadrill_make_urls_dynamic', 20); add_filter('term_description', 'javadrill_make_urls_dynamic', 20); add_filter('get_the_excerpt', 'javadrill_make_urls_dynamic', 20); 014 継承(暗黙的なスーパークラスのコンストラクタ呼び出し) 010 解答例 | Javaドリル

014 継承(暗黙的なスーパークラスのコンストラクタ呼び出し) 010 解答例

014-010 014 継承
// 車両クラス (Vehicle)
class Vehicle {
    // 車両の色を表すインスタンス変数
    String color;

    // 車両クラスのデフォルトコンストラクタ
    Vehicle() {
        System.out.println("親クラスのデフォルトコンストラクタが呼び出されました。");
    }

    // 車両の色を取得するメソッド
    String getColor() {
        return color;
    }
}

// 自動車クラス (Car) - 車両クラスを継承
class Car extends Vehicle {
    // 自動車の速度を表すインスタンス変数
    int speed;

    // 自動車クラスのコンストラクタ
    Car(String color, int speed) {
        // 親クラスのデフォルトコンストラクタが暗黙的に呼び出される
        this.color = color; // 親クラスのフィールドに値を設定
        this.speed = speed;
    }

    // 自動車の速度を取得するメソッド
    int getSpeed() {
        return speed;
    }
}

// メインクラス
public class Main {
    public static void main(String[] args) {
        // 自動車クラスのインスタンス生成
        Car car = new Car("Blue", 60);

        // メソッドの呼び出しと結果の表示
        System.out.println("Car Color: " + car.getColor());
        System.out.println("Car Speed: " + car.getSpeed());
    }
}

この例では、Car クラスのコンストラクタが呼び出される際に、親クラス Vehicle のデフォルトコンストラクタが暗黙的に呼び出されています。

実行結果:

親クラスのデフォルトコンストラクタが呼び出されました。
Car Color: Blue
Car Speed: 60

この出力からわかるように、Car クラスのコンストラクタが呼び出された際に、親クラス Vehicle のデフォルトコンストラクタが暗黙的に呼び出されています。

暗黙的なスーパークラスのコンストラクタ呼び出し

Javaにおいて、サブクラスのコンストラクタが実行される際、暗黙的にスーパークラスのデフォルトコンストラクタが呼び出されるという仕組みがあります。ただし、スーパークラスには明示的に定義されたコンストラクタが存在する場合、デフォルトコンストラクタは自動的に生成されません。その場合、サブクラスのコンストラクタ内で super() を用いて明示的にスーパークラスのコンストラクタを呼び出す必要があります。

以下はその仕組みの簡単な解説です。

  1. デフォルトコンストラクタ:
    • クラスにコンストラクタが定義されていない場合、Javaはデフォルトコンストラクタ(引数を取らないコンストラクタ)を暗黙的に生成します。
  2. サブクラスのコンストラクタ:
    • サブクラスのコンストラクタが呼び出されると、最初にスーパークラスのコンストラクタが暗黙的に呼び出されます。このスーパークラスのコンストラクタ呼び出しは、super() を用いて行われます。
    • もしスーパークラスに引数を取るコンストラクタがある場合、super(引数) の形で明示的に呼び出す必要があります。

例として、以下のコードを見てみましょう:

class Vehicle {
    String color;

    // スーパークラスのコンストラクタ
    Vehicle(String color) {
        this.color = color;
        System.out.println("Vehicleのコンストラクタが呼ばれました。");
    }
}

class Car extends Vehicle {
    int speed;

    // サブクラスのコンストラクタ
    Car(String color, int speed) {
        // スーパークラスのコンストラクタが暗黙的に呼ばれる
        super(color);
        this.speed = speed;
        System.out.println("Carのコンストラクタが呼ばれました。");
    }
}

public class Main {
    public static void main(String[] args) {
        Car car = new Car("Blue", 60);
    }
}

この例では、Car クラスのコンストラクタが呼び出されると、super(color) によって Vehicle クラスのコンストラクタが暗黙的に呼び出され、その後に Car クラスのコンストラクタが実行されます。

「014 継承」問題集リスト

🎯 実習で理解を深めよう

この内容についてJavaDrillで実際に手を動かして学習できます

コメント

タイトルとURLをコピーしました