
問題
開発者は、既存のPaymentクラスの実装を提供するCreditcardPaymentクラスを作成する必要があります。
Paymentクラスは以下のように定義されています。
public abstract class Payment{
public abstract void make Payment(Decimalamount);
}
次の中から、CreditcardPaymentクラスを正しく実装する選択肢を選んでください。
A.public class CreditCardPayment extends Payment{
public override void makePayment(Decimalamount) {
/*実装*/
}
}
B.public class CreditCardPayment extends Payment{
public void makePayment(Decimalamount) {
/*実装*/
}
}
C.public class CreditCardPayment implements Payment{
public override void makePayment(Decimalamount){
/*実装*/
}
}
D.public class CreditCardPayment implements Payment{
public void makePayment(Decimalamount){
/*実装*/
}
}
正解
A.public class CreditCardPayment extends Payment{
public override void makePayment(Decimalamount) {
/*実装*/
}
}
B.public class CreditCardPayment extends Payment{
public void makePayment(Decimalamount) {
/*実装*/
}
}
C.public class CreditCardPayment implements Payment{
public override void makePayment(Decimalamount){
/*実装*/
}
}
D.public class CreditCardPayment implements Payment{
public void makePayment(Decimalamount){
/*実装*/
}
}
解説
A. 正解 - CreditCardPaymentクラスはPaymentクラスを正しく継承し、抽象メソッドmakePaymentをオーバーライドしています。これにより、具体的な実装を提供しています。
B. 不正解 - メソッドはオーバーライドされていますが、overrideキーワードが欠けているため、正しくオーバーライドされているとは見なされません。
C. 不正解 - Paymentは抽象クラスであり、インターフェースとして実装することはできないため不適切です。
D. 不正解 - 同様に、Paymentをインターフェースとして実装する形式になっており、正しくはありません。
ポイント
CreditCardPaymentクラスは、Paymentクラスという「親クラス」から正しく引き継いで(継承して)、makePayment という方法(メソッド)をちゃんと上書き(オーバーライド)しています。
他の選択肢は、この引き継ぎ方や上書きのやり方が間違っているので、正解ではありません。
イメージ:親クラスは「基本ルール」、子クラスはそのルールをちょっと変えたり追加したりできるもの。この問題では、CreditCardPaymentがルールを守りつつ正しく工夫しています!