现实中的继承一般是指财产的继承。而与之相似的是文化上的传承,传承是“去其糟粕,取其精华”的。Solidity中的继承一般可以继承父合约中所有变量与方法,但如果需要限制的话,也可以通过封装好的修饰符进行继承权限的限制。

实验目的

1. 明白继承基本结构。

2. 了解继承中的重写

3. 知道继承中的封装权限。

实验要求

1. 查看示例1的代码。合约son继承合约father,请思考合约son是否能调用father里面的变量money与函数smoking?请编译部署son合约(注意在部署界面的CONTRACT那里切换为son合约),看看是否能成功调用getMoney与test函数。请你仿照合约son补充代码:合约father继承合约grandFather,合约father声明函数getGudong()以调用合约grandFather的变量gudong并返回;合约son声明函数LearningStudy()调用合约grandFatrher的函数study()并返回。

2. 查看示例1中的代码。请你将Son合约中重写的smoking方法注释去掉,然后编译查看重写是否成功。如果报错请根据提示进行修改。需改完后,重新编译部署,调用函数test,检查返回的值是否被重写。

3. ①查看示例2的代码。编译并部署合约Son,调用函数getMoney,查看父合约被public修饰的变量Money子合约是否可以调用。然后注释掉被public修饰的Money,依次测试internal,priavte,external修饰的Money。请你找出哪些是不能修饰变量属性的?它们在父合约修饰的变量,在子合约中是否可调用?

②请你将合约Son中的函数test的注释去掉。修改该函数的方法体,使之成功调用父合约被external修饰的noSmoking函数。如果父合约Father不想子合约继承它的方法noSmoking,那么应该怎么修饰该函数?

以下是本次实验所使用到的测试代码,请使用remix编辑器完成该实验

示例1
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0; 
contract grandFather{
    uint gudong = 100;
    function study()public view returns(string memory){
        return "XueXi";
    }
} 
 
contract father{
    uint money = 999;  
    function smoking() public pure returns (string memory) {
        return "I like somking";
    }  
}
contract son is father {   
    function getMoney() public view returns (uint) {
        return money;
    } 
    function test() public pure returns(string memory){
        return smoking();
}
//function smoking() public pure returns (string memory) {
//        return "I don't like somking";
//}  
}
//示例2
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0; 
contract Father{
    uint public Money = 2000; 
    // uint internal Money = 3000; 
    // uint private Money = 4000; 
    // uint external Money = 5000; 
    function noSmoking() external pure returns(string memory){
        return "I'm not somking";        
    } 
}
contract Son is Father{ 
    function getPrivateMoney() public view returns(uint){ 
        return Money; 
    } 
    
    function test() public view returns (string memory) {
        //return noSmoking();
    }
}

下面是本次实验所配套的视频教程: