본문 바로가기

# 02/코틀린

[Kotlin] Class

반응형

class - java


class 클래스이름 {

클래스이름(변수) {

생성자 정의

}

}



class - kotlin


java


class 클래스이름 {

클래스이름(변수)  {


}

}


kotlin


class 클래스이름 constructor(변수) {


}

class 클래스이름(변수) {


}



class - java 다중 생성자


class Sample {

private String name;

private int age;


Sample(String name) {

this.name = name;

}

Sample(String name, int age) {

this(name);

this.age = age;

}

}



class - kotlin 다중 생성자


// primary constructor - constructor 생략 가능

class Sample constructor(val name : String, val age : Int) {

// secondary constructors - 생략 불가

constructor (name : String) : this (name, 0)

}



class - Default 생성자


class Sample(val name : String, val age : Int = 0)




class - java init


class Sample {

private String name;

private int age;


Sample(String name) {

this.name = name;

Log.d("TEMP", "name "+ name + " age " + age);

}

Sample(String name, int age) {

this(name);

this.age = age;

Log.d("TEMP", "name " + name + " age " + age);

}


}



class - init


class Sample(val name : String, val age : Int = 0) {


constructor (name : String) : this(name, 0) {

println ("----------- name : $name, age : $age")

}


init {                                                                                                // init 이 먼저 실행됨.

println ("name : $name, age : $age")

}

}



class 생성자에서 초기화


class Customer(name : String) {

val customerName = name.toUpperCase()                                              // 대문자로 변경


init {

print("name $name customerName $customerName")

}

}




class Customer private constructor(name : String) {                                 // class private 설정

val customerName = name.toUpperCase()                                       // 대문자로 변경


init {

print("name $name customerName $customerName")

}

}



class 상속 - java : abstract


public abstract class Base {

public Base(int age) {


}

}


// 추상 클래스의 상속을 다음과 같이 사용

public class UseBase extends Base {

public UseBase(int age) {

super(age);

}

}



class 상속 - kotlin: abstract


abstract class Base(age : Int)


// 추상 클래스를 다음과 같이 사용

class UseBase (age : Int) : Base(age)




class 상속 - java : interface


interface Base {

String getName();

}


// 추상 클래스를 다음과 같이 사용

class UseBase implements Base {

@Override

public String getName() {

return "name";

}

}



class 상속 - kotlin : interface


interface Base {

fun getName() : String

}


// 추상 클래스를 다음과 같이 사용

class UseBase : Base {

override fun getName() = "name"

}




fun test() {

println(Customer(1).moreThan10YearsOld())

}


abstract class AbstractBase(val age : Int)


interface InterfaceBase {

fun moreThan10YearsOld() : Boolean

}


class Customer(age : Int) : InterfaceBase, AbstractBase(age) {

override fun moreThan10YearsOld() = age > 10

}




class open

- kotlin은 abstract/interface을 제외한 모든 클래스는 final이다.


final class Sample {


}


class Temp extends Sample {                           // 오류 발생


}



class Base (age : Int)


// open으로 생성한 추상 클래스를 다음과 같이 사용

class UseBase(age:Int) : Base(age)                               // Base 클래스는 java의 final 클래스와 같아서 상속안됨!!




open class Base (age : Int)


// open으로 생성한 추상 클래스를 다음과 같이 사용

class UseBase(age:Int) : Base(age)                               // Base 클래스 open 선언해줘서 상속 가능!!


반응형

'# 02 > 코틀린' 카테고리의 다른 글

[Kotlin] Control Flow - if/when/loops  (0) 2019.07.11
[Kotlin] Function  (0) 2019.07.11
[Kotlin] Properties and Fields  (0) 2019.07.11
[Kotlin] Types  (0) 2019.07.11
[Kotlin] 조건문  (0) 2019.07.10