class Person(val name:String, val birthYear:Int)
{
init { // 기본 생성자
println("${this.birthYear}년생 ${this.name} 생성")
}
constructor(name:String) : this(name, 1999) { // 보조 생성자
}
fun printProfile() { // 보조 생성자
println("이름: $name, birthYear: $birthYear")
}
}
init : 기본 생성자constructor : 보조 생성자, : this(..)를 활용하여 기본 생성자를 호출하여 멤버 변수 초기화 필요kotlin은 상속 금지가 기본 값으로, 상속을 허용하려면 open 키워드를 사용해야 한다
open class Person(val name:String, val birthYear:Int)
{
init {
println("${this.birthYear}년생 ${this.name} 생성")
}
constructor(name:String) : this(name, 1999) { // 보조 생성자
}
fun printProfile() {
println("이름: $name, birthYear: $birthYear")
}
}
class Student(name:String, birthYear:Int, var studentNum:Int) : Person(name, birthYear)
{
fun printStudentNum() {
println("${this.birthYear}년생 ${this.name}학생의 학번: ${this.studentNum}")
}
}
: Person(name, birthYear)var 등의 키워드를 붙이지 않고 선언kotlin에서는 오버라이드를 위해 슈퍼클래스의 매서드에 open 키워드를 붙여 오버라이드를 허용해 주어야 한다.
또 오버라이드를 적용하고자 하는 서브클래스에 override 키워드를 붙여 주어야 한다.
open class Person(val name:String, val birthYear:Int) {
init {
println("${this.birthYear}년생 ${this.name} 생성")
}
constructor(name:String) : this(name, 1999) { // 보조 생성자
}
open fun printProfile() {
println("이름: $name, birthYear: $birthYear")
}
}
class Student(name:String, birthYear:Int, var studentNum:Int) : Person(name, birthYear) {
fun printStudentNum() {
println("학번: ${this.studentNum}")
}
override fun printProfile() {
println("이름: $name, birthYear: $birthYear, 학번: $studentNum")
}
}
abstract class Animal {
abstract fun eat()
}
class Dog : Animal() {
override fun eat() {
println("개가 사료를 먹습니다.")
}
}
interface Runner {
fun run() // abstract 적용
}
interface Eater {
fun eat() { // open 적용
println("음식을 먹습니다.")
}
}
class Cat : Runner, Eater { // 다중 상속
override fun run() {
println("고양이가 달립니다.")
}
override fun eat() {
println("고양이가 음식을 먹습니다.")
}
}
open, 구현부가 없는 함수는 abstract로 자동으로 선언됨