Yonatan Karp-Rudin
Yonatan Karp-Rudin


Yonatan Karp-Rudin

Kotlin Code Smell 009 - Subclassification for Code Reuse

Kotlin Code Smell 009 - Subclassification for Code Reuse

Code reuse is good, But subclassing generates a static coupling

Yonatan Karp-Rudin's photo
Yonatan Karp-Rudin
·Dec 13, 2022·

1 min read

Play this article

Table of contents

  • Problems
  • Solutions
  • Exceptions
  • Sample Code
  • Conclusion
  • More info
  • Credits

TL;DR: Always Favor composition over inheritance.


  • Coupling

  • Maintainability


  • Composition


  • If the hierarchy follows the principle behaves like then it is safe.

Sample Code


open class Rectangle(
    protected val length: Int,
    protected val width: Int
) {
    open fun area() = length * width

class Square(size: Int) : Rectangle(size, size) {
    override fun area() = length * length

class Box(size: Int) : Rectangle(size, size)


interface Shape {
    fun area(): Int

class Rectangle(
    private val length: Int,
    private val width: Int
) : Shape {
    override fun area() = length * width

class Square(private val size: Int) : Shape {
    override fun area() = size * size

class Box(size: Int) {
    private val shape: Square

    init {
        shape = Square(size)

    fun area() = shape.area()


In legacy systems is very common to have Deep Hierarchies and method overriding, we need to refactor them and subclass them by essential reasons and not implementation ones.

More info


Share this