Apex abstractクラスにprotected でメソッドを実装するサンプル

環境
Salesforce Apex

構文
[global | public | private | protected] /* アクセス範囲 */
[abstract] /* abstractかどうか */
[virtual] /* virtualかどうか */
[override] /* overrideかどうか */
[static] /* static かどうか */
data_type /* 型 */
method_name /* メソッド名 */
(input parameters) /* 引数 */
{
// 処理コード
}

アクセス範囲
global
すべての Apex クラスからアクセス可能
外部から呼び出すような method に使う

public
同じパッケージの Apex クラスからアクセス可能

protected
同じクラス、継承したクラスからアクセス可能
Javaの protected と同じだが、記述にクセがある

使用例
abstract なメソッドが protected で継承先が実装クラスの場合、
protected でメソッドを実装しようとしてもコンパイルエラーになります。

public abstract class AbstractBase {
    public void show() {
        xutest();
        ctn();
    }

    abstract protected void xutest();

    protected void ctn() {
        System.debug('abstractbase::ctn');
    }
}


public abstract class Concrete extends AbstractBase {

    // この定義だとエラーになる
    protected void xutest() {
        System.debug('jiaos::xutest11');
    }

    // これだとエラーにならない
    public void xutest() {
        System.debug('jiaos:xutest22');
    }
}

 

IT

Posted by arkgame