In an object-oriented language (like Swift), if you call a object's method, and that method isn't defined in the object's class, it runs the method from the superclass. And if the method isn't defined there, it runs the method in the superclass's superclass, and so on. A class can also choose to define a method in an object without providing code for that method. This kind of class is called an abstract class. An abstract class usually can't be instantiated. ("Instiantiated" means an object of that class is made at runtime.) var A:MyClass? = nil A = MyClass () //This won't work if you have at least one method without code. A method without code: I don't mean func Blah () {} <== This method does have code. It has empty code. A class can inherit from that class, but if it wants to be instantiated, it has to provide the code for those methods that don't have it. "Template": A template is a class that has no data fields and none of whose methods has code. The template system was designed to be less complicated than the C++ object system. C++ offers full multiple inheritance: A class can inherit from as many other classes as it wants. Most languages since C++ use a template system, including Swift. A class an inherit from ONE superclass, and from as many templates as it wants to.