In some object oriented programming (OOP) languages there is a keyword "interface" used to declare a type that defines how objects that "implement" (another keyword) it may accept messages (calls) from other objects. These types are called interfaces.
However, some objects do not "implement" an "interface". Yet these may also accept messages (again calls) from other objects. This is defined simply by what the object makes accessible (public etc.). This is also called the objects interface even though there is no separately defined type for it.
The fact that these two distinct ideas go by the same name is making writing about them difficult. I have seen "explicit interface" used to mean the first kind. However, in C# this has a different meaning (package disambiguation) than what I'm discussing here.
I need two good ways to refer to these two ideas that makes it clear which is being referred to in each case and I need them to work for every OOP language.
A little background for clarity: When java, and later C#, decided to create a type that did not allow implementation code to exist in it but only defined a set of accessible methods (a protocol) they decided to give it "interface" as it's keyword. This meant people would later refer to them as "interfaces".
However, before that the word interface already meant what was accessible (not hidden by access modifiers like private). It still means this but when people use it now it's hard to know which they mean.
Other languages like c++ have no keyword for this and call such creations header files. Thus a c++ programmer can talk about header files and interfaces with no ambiguity.