【Salesforce 認定Platformデベロッパー】試験対策:第188問

問題

開発者は、インスタンス化できないShippingCalculatorクラスを作成する必要があり、サブクラスがオーバーライドできるcalculateメソッドの実用的なデフォルト実装を含める必要があります。 ShippingCalculatorクラスの正しい実装はどれですか。

  • Public abstract class ShippingCalculator {
    public override calculate() { /*implementation*/ }
    }
  • Public abstract class ShippingCalculator {
    public virtual void calculate() { /*implementation*/ }
    }
  • Public abstract class ShippingCalculator {
    public abstract calculate() { /*implementation*/ }
    }
  • Public abstract class ShippingCalculator {
    public void calculate() { /*implementation*/ }
    }

正解

  • Public abstract class ShippingCalculator {
    public override calculate() { /*implementation*/ }
    }
  • Public abstract class ShippingCalculator {
    public virtual void calculate() { /*implementation*/ }
    }
  • Public abstract class ShippingCalculator {
    public abstract calculate() { /*implementation*/ }
    }
  • Public abstract class ShippingCalculator {
    public void calculate() { /*implementation*/ }
    }

解説

問題文の内容を元に、必要な要件を明確に箇条書きで整理します。

問題文:開発者は、①インスタンス化できないShippingCalculatorクラスを作成する必要があり、②サブクラスがオーバーライドできるcalculateメソッド③実用的なデフォルト実装を含める必要があります。 ShippingCalculatorクラスの正しい実装はどれですか。

  • インスタンス化できない:
    • この要件は、クラスがabstractであることを示しています。abstractクラスは直接インスタンス化することができません。
  • サブクラスがオーバーライドできるcalculateメソッド:
    • この要件は、calculateメソッドがvirtualであることを示しています。virtualキーワードは、このクラスが拡張や上書きを許可することを宣言します。よって、virtualメソッドは、サブクラス(子クラス)でオーバーライド(上書き)することができます。
      ※クラスが virtualとして定義されていない場合、overrideキーワードを使用したメソッドの上書きはできません。
  • 実用的なデフォルト実装を含める:
    • この要件は、calculateメソッドが具体的な実装内容(コードブロック)を持つことを示しています。abstractクラスは、抽象メソッド(実装がないメソッド)を持つことができますが、この要件はcalculateメソッドが具体的な実装を持つ必要があるため、calculateメソッドはabstractメソッドではなく、virtualメソッドとして存在する必要があります。

それぞれの選択肢の理由について説明します。

□ Public abstract class ShippingCalculator {
public override calculate() { /*implementation*/ }
}

これは不正解です。overrideキーワードは、サブクラスで既存のvirtualまたはabstractメソッドをオーバーライドするために使用されます。しかし、このクラスにはオーバーライドする元となるvirtualまたはabstractメソッドが存在しません。また、calculateメソッドの戻り値の型が指定されていません。

□ Public abstract class ShippingCalculator {
public virtual void calculate() { /*implementation*/ }
}

これは正解です。virtualキーワードは、メソッドがサブクラスでオーバーライドされることを許可するために使用されます。この選択肢では、calculateメソッドはデフォルトの実装を持ち、サブクラスでオーバーライドすることができます。

□ Public abstract class ShippingCalculator {
public abstract calculate() { /*implementation*/ }
}

これは不正解です。abstractメソッドは実装(コードブロック)を持つことができません。この選択肢では、abstractメソッドに具体的な実装が含まれているため、不正確です。また、calculateメソッドの戻り値の型が指定されていません。

□ Public abstract class ShippingCalculator {
public void calculate() { /*implementation*/ }
}

これは不正解です。この選択肢のcalculateメソッドは、サブクラスでオーバーライドすることができない普通のメソッドとして定義されています。オーバーライドを許可するためには、calculateメソッドにvirtualキーワードが必要です。

次の問題へ

前の問題へ

1問目から復習する

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

雇われのシステムエンジニアです。
普段は車載ECUのセキュリティー分野に従事しております。

■保有資格
Salesforce 認定 アドミニストレーター
Salesforce 認定 Platform アプリケーションビルダー
Salesforce 認定 Platform デベロッパー

コメント

コメントする

目次