Extension properties in Kotlin let you add new properties to existing classes without changing their code. You define them with a getter that computes the value. For example, adding a 'firstChar' property to String returns the first character. When you use the property, Kotlin calls the getter to get the value. Extension properties cannot store data themselves because they have no backing fields. This means they only compute and return values on demand. In the example, the property is defined first, then a string variable is created. Accessing the property calls the getter, which returns the first character. Finally, the program prints that character and ends.