constructor 키워드로 작성. 클래스 선언부에 선언하며 필수는 아니다. - constructor 키워드 필수 아님. 개발자가 선언하지 않으면 컴파일러가 매개변수 없는 주생성자 자동으로 추가함. class User constructor(){}
// 키워드 생략
class User(){{
// 개발자가 작성 안하면 자동으로 매개변수 없는 생성자
class User{}
class User(name: String, count: Int){
init {
println("i am init..")
}
}
fun main(){
val user = User("du", 23)
}
/// 실행결과 : i am init..
class User(name : String, count: Int) {
init{
println("name:$name", count:$count") //성공!!
}
fun someFun(){
println("user is $name, her age is $count years old.")} // 실패!! 매개변수는 init에서만 사용가능함
}
fun main(){
val user = User("duridudu", 23)
user.someFun()
}
class User(name : String, count: Int) {
// 클래스 멤버변수 선언!!!
var name:String
var count:Int
init{
this.name = name
this.count = count
}
fun someFun(){
println("user is $name, her age is $count years old.")} //
}
fun main(){
val user = User("duridudu", 23)
user.someFun()
}
방법2) 주생성자 매개변수를 var이나 val 키워드로 선언하면 클래스의 멤버변수가 됨;; << 훨씬 간편!
class User(val name : String, val count: Int) {
fun someFun(){
println("user is $name, her age is $count years old.")}
}
fun main(){
val user = User("duridudu", 23)
user.someFun()
}
class User {
constructor(name:String){
println("constructor1 call...")
}
constructor(name:String, count:Int){
println("constructor2 calls/,,,")
}
}
fun main(){
val user = User("duridudu", 23)
val user2 = User("duridudu")
}
class User(name:String) { //<<< 오류!!!
constructor(name:String){
println("constructor1 call...")
}
}
class User(name: String) {
constructor(name:String, count:Int):this(name){
println("constructor2 calls/,,,")
}
}
fun main(){
val user = User("duridudu", 23)
val user2 = User("duridudu")
}
open class Super(name:String){
}
class Sub(name:String):Super(name){
}
open class Super(name:String){
}
class Sub:Super{
constructor(name:String):super(name){}
}
open class Super{
open var someData = 10
open fun someFun(){
println("i am super class function : $someData")
}
}
class Sub():Super(){
override var someData= 20
override fun someFun() {
println("i am sub class function : $someData")
}
}
fun main(){
val obj = Sub()
obj.someFun()
}
publicinternalprotectedprivateopen class Super{
var publicData = 10
protected var protectedData = 20
private var privateData = 30
}
class Sub:Super(){
fun subFun(){
publicData++
protectedData++ // 상속받았으니가 갠춘
privateData++ // 같은 클래스 아니라 오류!!
}
}
fun main(){
val obj = Super()
obj.publicData++
obj.protectedData++ // 상속받은 하위 클래스 아니라 오류!!
obj.privateData++ // 같은 클래스 아니라 오류!!
}