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 でメソッドを実装しようとしてもコンパイルエラーになります。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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');
}
}
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'); } }
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