package Interfaces //코틀린에선 기본적으로 클래스를 상속할 수 없음 //최상위 부모는 Any임 (java에선 Object) //추상 클래스 //abstract로 클래스, 변수, 함수 모두 선언함 //클래스 내부에 구현된 함수가 존재할 수 있음 //추상 클래스를 인스턴스로 직접 생성할수는 없음 //추상 클래스는 1개만 상속받을 수 있음 //abstract class Product(val name: String, var price: Double) { // // 상품 카테고리를 담을 추상 프로퍼티 // abstract val category: String // // // 모든 상품이 공유하는 함수 // fun productInfo(): String { // return "Product: $name, Category: $category, Price: $price" // } //} //위 product 클래스를 상속받는 객체 //class Electronic(name: String, price: Double, val warranty: Int) : Product(name, price) { // override val category = "Electronic" //} //추상화된 객체, 변수는 override를 통해 구현 해줘야한다. //인터페이스 //인스턴스를 만들 수 없음 //인터페이스는 기본적으로 Open 상태 //open 상태는 상속 받을 수 있는 상태를 말함 kotlin에서는 기본이 close//이외는 java와 똑같으니 설명 생략 //위임 //인터페이스에서 특정 값만 바꾸고 싶을 때 //kotlin에서는 by를 이용해 구현을 다른 인스턴스에 위임할 수 있음 //class CanvasSession(val tool: DrawingTool) : DrawingTool by tool { // override val color = "blue" //} //위 코드같은 경우엔 DrawingTool의 구현을 tool에게 위임한 것 //인자로 DrawingTool 인터페이스를 구현한 객체를 넣어주면 나머지 함수들은 tool에 있던 것들을 가져옴