Kotlin OOP Program: Shape base class and Polymorphic subclasses
Write a Kotlin object-oriented program that creates a base class Shape and derives subclasses Circle, Rectangle, and Triangle. Implement appropriate methods in each class and demonstrate polymorphism.
Sample Solution:
Kotlin Code:
abstract class Shape {
abstract fun area(): Double
abstract fun perimeter(): Double
}
class Circle(private val radius: Double) : Shape() {
override fun area(): Double {
return Math.PI * radius * radius
}
override fun perimeter(): Double {
return 2 * Math.PI * radius
}
}
class Rectangle(private val width: Double, private val height: Double) : Shape() {
override fun area(): Double {
return width * height
}
override fun perimeter(): Double {
return 2 * (width + height)
}
}
class Triangle(private val side1: Double, private val side2: Double, private val side3: Double) : Shape() {
override fun area(): Double {
val semiPerimeter = perimeter() / 2
return Math.sqrt(semiPerimeter * (semiPerimeter - side1) * (semiPerimeter - side2) * (semiPerimeter - side3))
}
override fun perimeter(): Double {
return side1 + side2 + side3
}
}
fun main() {
val circle = Circle(4.5)
val rectangle = Rectangle(7.0, 11.0)
val triangle = Triangle(4.0, 5.0, 6.0)
val shapes = listOf(circle, rectangle, triangle)
for (shape in shapes) {
println("Area: ${shape.area()}")
println("Perimeter: ${shape.perimeter()}")
println()
}
}
Sample Output:
Area: 63.61725123519331 Perimeter: 28.274333882308138 Area: 77.0 Perimeter: 36.0 Area: 9.921567416492215 Perimeter: 15.0
Explanation:
In the above exercise -
- The "Shape" class is declared as an abstract class with two abstract methods: "area()" and "perimeter()". The Circle, Rectangle, and Triangle classes inherit from the "Shape" class and provide their own implementations of these methods.
- In the "main()" function, instances of Circle, Rectangle, and Triangle are created and stored in a list. Using a loop, the program demonstrates polymorphism by calling the area() and perimeter() methods on each shape object. This dynamically invokes the appropriate implementation based on the actual object type.
- The output of the program will display the area and perimeter of each shape.
Kotlin Editor:
Previous: Kotlin OOP Exercises Home.
Next: Implementing a logger for logging functionality.
What is the difficulty level of this exercise?
Test your Programming skills with w3resource's quiz.
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics