(質問全文) 開発者は、既存の Payment クラスの実装を提供する CreditCardPayment クラスを作成する必要があります。 public virtual class Payment { public virtual void makePayment(Decimal amount) { // implementation } } Which is the correct implementation?
正解:D
Comprehensive and Detailed Explanation From Exact Extract: * D (Correct):Since Payment is avirtual class, it can beextended(not implemented like an interface), and its makePayment method is also virtual, which allows it to be overridden using the override keyword. The use of override is required to redefine a virtual or abstract method from the parent class. Reference:Apex Developer Guide - Inheritance and Polymorphism This maps to"Developer Fundamentals"in the PD1 exam, specifically aroundobject-oriented programming principles.
最新のコメント (最新のコメントはトップにあります。)
正解は **D** です。
### 領域の確認
* **領域:** **1. 開発者の基本 (Developer Fundamentals)**
* **トピック:** Apex のオブジェクト指向プログラミング、継承 (Inheritance)、オーバーライド
---
### 正解の解説
**D. `public class CreditCardPayment extends Payment { public override void makePayment(Decimal amount) { /* implementation */ } }`**
この問題は、Apex における **クラスの継承 (Inheritance)** と **メソッドのオーバーライド (Override)** の正しい構文を問うています。
1. **extends vs implements:**
* `Payment` は **クラス (`class`)** として定義されています(インターフェースではありません)。
* クラスを継承する場合は、キーワード **`extends`** を使用します。
* (※ `implements` はインターフェースを実装する場合に使います)。
* これだけで、選択肢 B と C は除外されます。
2. **virtual vs override:**
* 親クラス (`Payment`) のメソッドには **`virtual`** が付いています。これは「このメソッドは上書き可能です」という意味です。
* 子クラス (`CreditCardPayment`) で、そのメソッドの中身を書き換える(実装を提供する)場合は、キーワード **`override`** を付ける必要があります。
* 選択肢 A は `virtual` を使っていますが、上書きする側には `override` が必須です。
したがって、`extends` と `override` の両方を正しく使っている **D** が正解です。
---
### 不正解の解説
**A. ... extends Payment { public virtual void ... }**
これは **不正解** です。
親のメソッドを上書きする場合、子クラス側のメソッドには `virtual` ではなく **`override`** を付ける必要があります。`override` がないと、Salesforce は「親のメソッドを隠蔽しようとしているのか、上書きしたいのか」判断できず、コンパイルエラーになります。
**B. ... implements Payment { ... }**
これは **不正解** です。
`Payment` はインターフェース (`interface`) ではなくクラス (`class`) なので、`implements` は使えません。
**C. ... implements Payment { ... }**
これも **不正解** です。
Bと同様に `implements` が誤りです。
---
### 💡 覚え方:継承のキーワードセット
Apex のクラス継承では、以下のキーワードがペアになります。
| 親クラ...