我们在「【开发智能合约— Solidity系列】何谓继承(Inheritance)」有提到继承的一些基本概念,然而在继承的过程中我们可能会用到上游的方法,甚至加工,而方法名称重复了,是否能被允许呢答案是「允许」的,就好比我们虽然继承了父亲的「处事技巧」,但在求新求变的时代中,或许传统的老旧方法已经不适用于现代,因此就需要覆写掉「处事技巧」这个方法,甚至基于传统的方法之后进行扩增,而Solidity提供了继承当然也支援了覆写的方式,让整个合约更加弹性。

但有几个值得注意的是,当我们的合约欲设计为可覆写的方法时,需要加入两个重要的关键字,分别为:

virtual: 被继承的合约方法需要标示此关键字之后,该方法才能被覆写。 override: 标示该方法以覆写后的形式呈现。

另外我们也可以用「扩充」的观点来进行覆写的功能加强。

实际Demo范例

我们一样使用Solidity Remix Editor来进行合约的测试,如果不清楚如何进行Debug的朋友欢迎先来阅读此篇「【开发智能合约— Solidity系列】环境与工具篇:如何使用Remix进行Debug」,接着我们就直接进行Deploy到暂存链进行测试如下:

结语

玩到这边,渐渐的发现其实Solidity融合了物件导向的概念,不仅具有物件、界面、继承…,更是能够进行override,对于物件导向基础已经打的非常稳固的朋友来说应该相当的容易入门,而我们学习物件导向的过程中应该常常被「overriding」与「overloading」搞混对吧!这两个名词的理解其实是有诀窍的哦!我们下一篇「【开发智能合约— Solidity系列】合约内同名但不同用途的函数超载(Function Overloading)」就会带大家如何识别这两个相似名词的差异。