Open In App
Related Articles

Solidity – Basics of Interface

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Report issue
Report

Interfaces are the same as abstract contracts created by using an interface keyword, also known as a pure abstract contract. Interfaces do not have any definition or any state variables, constructors, or any function with implementation, they only contain function declarations i.e. functions in interfaces do not have any statements. Functions of Interface can be only of type external. They can inherit from other interfaces, but they can’t inherit from other contracts. An interface can have enum, structs which can be accessed using interface name dot notation.

Example: In the below example, the contract MyContract implements an interface from the InterfaceExample.sol file and implements all the interface functions. Import the InterfaceExample.sol  file into the MyContract.sol file  before deploying it.

InterfaceExample.sol : 

Solidity

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.6 <0.9.0; 
//initialize the interface
interface InterfaceExample{
 
    // Functions having only
    // declaration not definition
    function getStr(
    ) external view returns(string memory);
 
    function setValue(
    uint _num1, uint _num2) external;
 
    function add(
    ) external view returns(uint);
}

                    

MyContract.sol: 

Solidity

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.6 <0.9.0; 
/// @title A contract for demonstrate the working of the interface
/// @author Jitendra Kumar
/// @notice For now, this contract just show how interface implements in the smart contract
 
import "./InterfaceExample.sol";
// Contract that implements interface
contract MyContract is InterfaceExample{
 
    // Private variables
    uint private num1;
    uint private num2;
 
    // Function definitions of functions
    // declared inside an interface
    function getStr() public view virtual override returns(string memory){
        return "GeeksForGeeks";
    }
     
    // Function to set the values
    // of the private variables
    function setValue(
    uint _num1, uint _num2) public virtual override{             
        num1 = _num1;
        num2 = _num2;
    }
     
    // Function to add 2 numbers
    function add(
    ) public view virtual override returns(uint){
        return num1 + num2;
    }
}
 
contract call{
     
    //Creating an object
    InterfaceExample obj;
 
    constructor(){
        obj = new MyContract();
    }
     
    // Function to print string
    // value and the sum value
    function getValue(
    ) public returns(string memory,uint){
        obj.setValue(10, 16);
        return (obj.getStr(),obj.add());
    }
}

                    

Output : 

Interface Example


 



Last Updated : 09 Mar, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads