Kotlin에서는 객체지향 프로그래밍(OOP)의 중요한 개념인 상속과 다형성을 지원한다.
final로 선언되어 있어 상속이 불가능하다. 상속을 허용하려면 open 키워드를 사용해야 한다.open class Animal(val name: String) { open fun sound() { println("$name makes a sound") } }
class Dog(name: String) : Animal(name) { override fun sound() { println("$name barks") } } class Cat(name: String) : Animal(name) { override fun sound() { println("$name meows") } }
fun main() { val dog = Dog("Buddy") dog.sound() // 출력: Buddy barks val cat = Cat("Whiskers") cat.sound() // 출력: Whiskers meows }
fun main() { val animals: Array<Animal> = arrayOf(Dog("Buddy"), Cat("Whiskers")) for (animal in animals) { animal.sound() // 각 Animal 객체의 sound() 메서드 호출 } }
Buddy barks Whiskers meows
abstract class Shape(val name: String) { abstract fun area(): Double abstract fun perimeter(): Double }
class Circle(name: String, val radius: Double) : Shape(name) { override fun area(): Double { return Math.PI * radius * radius } override fun perimeter(): Double { return 2 * Math.PI * radius } } class Rectangle(name: String, val width: Double, val height: Double) : Shape(name) { override fun area(): Double { return width * height } override fun perimeter(): Double { return 2 * (width + height) } }
fun main() { val shapes: Array<Shape> = arrayOf(Circle("Circle", 3.0), Rectangle("Rectangle", 4.0, 5.0)) for (shape in shapes) { println("${shape.name} - Area: ${shape.area()}, Perimeter: ${shape.perimeter()}") } }
Circle - Area: 28.274333882308138, Perimeter: 18.84955592153876 Rectangle - Area: 20.0, Perimeter: 18.0
interface Drivable { fun drive() } interface Flyable { fun fly() }
class Car : Drivable { override fun drive() { println("Car is driving") } } class Airplane : Drivable, Flyable { override fun drive() { println("Airplane is taxiing") } override fun fly() { println("Airplane is flying") } }
fun main() { val car: Drivable = Car() car.drive() // 출력: Car is driving val airplane: Airplane = Airplane() airplane.drive() // 출력: Airplane is taxiing airplane.fly() // 출력: Airplane is flying }