問題一覧に戻る
中級継承
問題49: 仮想関数とオーバーライド

Solidityの仮想関数とオーバーライドを学習します - スマートコントラクトでポリモーフィズムを可能にします。'virtual'でマークされた関数は派生コントラクトでオーバーライドできます。'override'キーワードは明示的に関数の置き換えを示します。このパターンにより、子コントラクトはインターフェースの互換性を維持しながら親の動作をカスタマイズできます。仮想関数は拡張可能なベースコントラクト、テンプレートパターン、アップグレード可能なシステムの作成に重要です。virtual/overrideの理解は柔軟なコントラクト階層の構築とDeFiプロトコルでのテンプレートメソッドなどのデザインパターンの実装に不可欠です。

pragma solidity ^0.8.0;

contract Animal {
// オーバーライド可能としてマーク
function sound() public pure returns (string memory) {
return "Some sound";
}
}

contract Dog is Animal {
// 親関数をオーバーライド
function sound() public pure returns (string memory) {
return "Woof!";
}
}