4

子クラスでオーバーライドしたいいくつかのプロパティを持つapexに抽象クラスがあります。ドキュメントによると、プロパティはオーバーライドと仮想アクセス修飾子の両方をサポートしています。ただし、親クラスまたは子クラスのいずれかでそれらのいずれかを使用しようとすると、変数を仮想/オーバーライドとしてマークできないというエラーが表示されます。このエラーの原因となるコードの複製を次に示します。

public abstract class Row{
    public virtual double value{
        get{return value==null ? 0 : value;}
        set;
    }
}

public class SummaryRow extends Row{
    private list<Row> childRows;
    public override double value{
        get{
            totalValue = 0;
            for(Row childRow:childRows){
                totalvalue += childRow.value;
            }
            return totalValue;
        }
    }
}

この機能はサポートされていませんか、それとも私が欠けているものがありますか?

前もって感謝します。

4

1 に答える 1

7

残念ながら、私が知る限り、それはドキュメントの間違いです。私は メソッドにoverridevirtual修飾子を適用することしかできませんでした。もちろん、プロパティのゲッター/セッターメソッドを手動で作成することで、目的の効果を得ることができます。

public abstract class TestRow {
    public Double value;

    public virtual Double getValue() {
        return value==null ? 0 : value;
    }

    public void setValue(Double value) {
        this.value = value;
    }
}

public class SummaryTestRow extends TestRow {
    private list<TestRow> childRows;

    public override Double getValue() {
        Double totalValue = 0;
        for(TestRow childRow : childRows){
            totalValue += childRow.value;
        }

        return totalValue;  
    }
}
于 2011-03-17T19:10:33.947 に答える