問題
開発者は、既存のPaymentクラスの実装を提供すCreditCardPaymentクラスを作成する必要があります。
public virtual class Payment {
public virtual void makePayment(Decimal amount) {
/*implementation*/
}
}
正しい実装はどれですか。
A
public class CreditCardPayment extends Payment {
public virtual void makePayment(Decimal amount) {
/*implementation*/
}
}
B
public class CreditCardPayment implements Payment {
public override void makePayment(Decimal amount) {
/*implementation*/
}
}
C
public class CreditCardPayment implements Payment {
public virtual void makePayment(Decimal amount) {
/*implementation*/
}
}
D
public class CreditCardPayment extends Payment {
public override void makePayment(Decimal amount) {
/*implementation*/
}
}
正解
D
解説
それぞれの選択肢の理由について説明します。
A
これは不正解です。makePaymentメソッドは基底クラスでvirtualとして定義されていますが、派生クラスで再定義する際にはoverrideキーワードを使用する必要があります。
public class CreditCardPayment extends Payment {
public virtual void makePayment(Decimal amount) {
/*implementation*/
}
}
B
これは不正解です。Paymentはクラスであり、インターフェースではありません。そのため、implementsキーワードではなく、extendsキーワードを使用する必要があります。
public class CreditCardPayment implements Payment {
public override void makePayment(Decimal amount) {
/*implementation*/
}
}
C
これは不正解です。前述の通り、Paymentはインターフェースではなくクラスです。また、virtualキーワードは使用できません。派生クラスでメソッドを再定義する場合、overrideキーワードを使用します。
public class CreditCardPayment implements Payment {
public virtual void makePayment(Decimal amount) {
/*implementation*/
}
}
D
これは正解です。。CreditCardPaymentクラスはPaymentクラスを拡張しており、makePaymentメソッドをoverrideして再定義しています。これにより、基底クラスのメソッドを正しくオーバーライドしています。
public class CreditcardPayment extends Payment {
public override void makePayment(Decimal amount) {
/*implementation*/
}
}
次の問題へ
前の問題へ
【Salesforce 認定Platformデベロッパー】試験対策:第214問
問題 Universal Containers社には、カスタムオブジェクトであるEngineering_Support__cを使用して、ユーザーがエンジニアリングチームにサポートを要求できるサポートプ…
1問目から復習する
【Salesforce 認定Platformデベロッパー】試験対策:第1問
問題 デバッグログに書き込まれるときのxの値は何ですか。 Integer x = 0; do { x = 1; x++; } while (x < 1); System.debug(x); 0 1 2 3 正解 0 1 2 3 解説 デバッ…
コメント