I have seen in countless places the terms treated synonymously. I have coded this example below which all works and I can see why this approach is useful. But is this an interface or an abstract contract?
Why do we even need interfaces?
pragma solidity ^0.4.16;
contract d7 {
function getBalance(address addr) pure public returns (uint) {
d8 bg = d8(addr);
return bg.myBalance();
}
}
contract d8 {
function myBalance() pure returns (uint);
}
Then d8 -
pragma solidity ^0.4.18;
contract d8 {
function myBalance() pure public returns (uint) {
return 880;
}
}
Hence I can leave d7 unchanged and redeploy d8 and then supply the new address to d7. This sounds a good idea to me. But I am unsure of the terminology to describe this contract and also why the interface keyword is used.