/** * ドメイン非依存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); 016 抽象クラス(基本概念) 004 解答例 | Javaドリル

016 抽象クラス(基本概念) 004 解答例

016-004 016 抽象クラス
// 既存の抽象クラス Person
abstract class Person {
    // 既存のフィールドやメソッドがあると仮定
    private String name;

    // 抽象メソッド displayInfo() を追加
    public abstract void displayInfo();
}

// 具象クラス Student
class Student extends Person {
    // Student クラスの固有のフィールド
    private int studentId;

    // コンストラクタ
    public Student(String name, int studentId) {
        this.name = name;
        this.studentId = studentId;
    }

    // displayInfo() メソッドの実装
    @Override
    public void displayInfo() {
        System.out.println("Student ID: " + studentId);
        System.out.println("Name: " + name);
        // 他にも必要な情報を表示する処理を追加
    }
}

// メインクラス
public class Main {
    public static void main(String[] args) {
        // Student クラスのインスタンスを作成
        Student student1 = new Student("John Doe", 123456);

        // displayInfo() メソッドを呼び出して学生の情報を表示
        student1.displayInfo();
    }
}

この例では、Person クラスに displayInfo() 抽象メソッドを追加し、Student クラスでこれをオーバーライドして学生の情報を表示する実装を提供しています。Main クラスで Student クラスのインスタンスを作成し、displayInfo() メソッドを呼び出すことで、学生の情報が表示されます。

出力結果:

Student ID: 123456
Name: John Doe

具象クラス Student のインスタンスを作成し、displayInfo() メソッドを呼び出した結果、学生のIDと名前が表示されます。

このコードでは、Person 抽象クラスに displayInfo() 抽象メソッドが追加されており、Student クラスがこのメソッドをオーバーライドして学生の情報を表示しています。Main クラスで Student クラスのインスタンスを作成し、displayInfo() メソッドを呼び出すことで、学生の情報がコンソールに出力されます。

抽象クラスの拡張

抽象クラスの拡張(拡張とは、別の言葉で継承とも呼ばれます)は、既存の抽象クラスを基にして新しい抽象クラスを作成するプロセスです。以下に、抽象クラスの拡張に関する解説をします。

抽象クラスの基本:

抽象クラスは、少なくとも1つ以上の抽象メソッド(未実装のメソッド)を持つことができます。また、具象メソッド(実装が提供されているメソッド)も持つことができます。

abstract class Animal {
    // 抽象メソッド
    public abstract void makeSound();

    // 具象メソッド
    public void sleep() {
        System.out.println("Zzz");
    }
}

抽象クラスの拡張:

既存の抽象クラスを基にして新しい抽象クラスを作成する場合、extends キーワードを使用します。新しい抽象クラスは、親クラスの抽象メソッドを実装するか、自身も抽象メソッドを追加できます。

abstract class Bird extends Animal {
    // Bird クラスが Animal クラスの抽象メソッドを実装
    @Override
    public void makeSound() {
        System.out.println("Tweet tweet");
    }

    // Bird クラス独自の抽象メソッド
    public abstract void fly();
}

具象クラスの作成:

新しい抽象クラスを拡張した後、そのクラスを具象クラスとして実装することができます。具象クラスは、すべての抽象メソッドを実装するか、抽象クラスを更に拡張して追加の抽象メソッドを定義することが求められます。

class Sparrow extends Bird {
    // Bird クラスから継承した抽象メソッド fly() の実装
    @Override
    public void fly() {
        System.out.println("Sparrow is flying");
    }
}

利用と拡張の継続:

このようにして作成されたクラス階層では、具象クラスを作成し、それをさらに拡張することができます。これにより、共通の機能を提供する抽象クラスから派生した、具体的で特殊なクラスを作成できます。

class Pigeon extends Bird {
    @Override
    public void fly() {
        System.out.println("Pigeon is flying");
    }
}

抽象クラスの拡張は、クラス階層を構築し、ポリモーフィズムを実現するための重要な手段の一つです。派生クラスで共通の機能を提供する抽象クラスを拡張し、新しい機能を追加することで、柔軟性と再利用性が向上します。

「016 抽象クラス」問題集リスト

🎯 実習で理解を深めよう

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

コメント

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