A class that extends another class inherits all the methods and properties of the extended class. In addition, the extending class can override the existing virtual methods by using the override keyword in the method definition. Overriding a virtual method allows you to provide a different implementation for an existing method. This means that the behavior of a particular method is different based on the object you’re calling it on. This is referred to as polymorphism.
A class extends another class using the extends keyword in the class definition. A class can only extend one other class, but it can implement more than one interface.
This example shows how the YellowMarker class extends the Marker class. To run the inheritance examples in this section, first create the Marker class.
public virtual class Marker { public virtual void write() { System.debug('Writing some text.'); } public virtual Double discount() { return .05; } }
Then create the YellowMarker class, which extends the Marker class.
// Extension for the Marker class public class YellowMarker extends Marker { public override void write() { System.debug('Writing some text using the yellow marker.'); } }
Marker obj1, obj2; obj1 = new Marker(); // This outputs 'Writing some text.' obj1.write(); obj2 = new YellowMarker(); // This outputs 'Writing some text using the yellow marker.' obj2.write(); // We get the discount method for free // and can call it from the YellowMarker instance. Double d = obj2.discount();
The extending class can have more method definitions that aren’t common with the original extended class. For example, the RedMarker class below extends the Marker class and has one extra method, computePrice, that isn’t available for the Marker class. To call the extra methods, the object type must be the extending class.
Before running the next snippet, create the RedMarker class, which requires the Marker class in your org.
// Extension for the Marker class public class RedMarker extends Marker { public override void write() { System.debug('Writing some text in red.'); } // Method only in this class public Double computePrice() { return 1.5; } }
This snippet shows how to call the additional method on the RedMarker class. Run this snippet in the Execute Anonymous window of the Developer Console.
RedMarker obj = new RedMarker(); // Call method specific to RedMarker only Double price = obj.computePrice();
Extensions also apply to interfaces—an interface can extend another interface. As with classes, when an interface extends another interface, all the methods and properties of the extended interface are available to the extending interface.