/** * ドメイン非依存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); 018 オブジェクト指向の深化(インターフェイスと抽象クラスの利用) 006 解答例 | Javaドリル

018 オブジェクト指向の深化(インターフェイスと抽象クラスの利用) 006 解答例

018-006 018 オブジェクト指向の深化
// BankAccount クラス(抽象クラス)
abstract class BankAccount {
    // メンバー変数
    private String accountNumber;
    private double balance;

    // コンストラクタ
    public BankAccount(String accountNumber, double initialBalance) {
        this.accountNumber = accountNumber;
        this.balance = initialBalance;
    }

    // deposit メソッドの実装
    public void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
            System.out.println("Deposited: $" + amount);
        } else {
            System.out.println("Invalid deposit amount");
        }
    }

    // withdraw メソッドの実装
    public void withdraw(double amount) {
        if (amount > 0 && amount <= balance) {
            balance -= amount;
            System.out.println("Withdrawn: $" + amount);
        } else {
            System.out.println("Invalid withdrawal amount or insufficient funds");
        }
    }

    // 抽象メソッド(サブクラスで実装が必要)
    public abstract void printAccountInfo();
}

// SavingsAccount クラス
class SavingsAccount extends BankAccount {
    // コンストラクタ
    public SavingsAccount(String accountNumber, double initialBalance) {
        super(accountNumber, initialBalance);
    }

    // addInterest メソッドの実装
    public void addInterest() {
        double interestRate = 0.05; // 5%の利息を仮定
        double interest = getBalance() * interestRate;
        deposit(interest);
        System.out.println("Interest added: $" + interest);
    }

    // printAccountInfo メソッドの実装
    @Override
    public void printAccountInfo() {
        System.out.println("Savings Account: " + getAccountNumber() + ", Balance: $" + getBalance());
    }
}

// CheckingAccount クラス
class CheckingAccount extends BankAccount {
    // コンストラクタ
    public CheckingAccount(String accountNumber, double initialBalance) {
        super(accountNumber, initialBalance);
    }

    // applyOverdraftFee メソッドの実装
    public void applyOverdraftFee() {
        double overdraftFee = 20.0; // オーバードラフト手数料を仮定
        withdraw(overdraftFee);
        System.out.println("Overdraft fee applied: $" + overdraftFee);
    }

    // printAccountInfo メソッドの実装
    @Override
    public void printAccountInfo() {
        System.out.println("Checking Account: " + getAccountNumber() + ", Balance: $" + getBalance());
    }
}

この解答例では、BankAccount クラスが口座の共通機能を提供し、SavingsAccount クラスと CheckingAccount クラスがそれぞれ普通預金口座と当座預金口座の機能を具体的に実装しています。サブクラスごとに異なるメソッドが追加され、それぞれの口座の情報を出力する printAccountInfo メソッドも実装されています。

「018 オブジェクト指向の深化」問題集リスト

🎯 実習で理解を深めよう

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

コメント

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